mirror of
https://github.com/go-vikunja/app
synced 2024-06-14 08:24:18 +00:00
load default project from server
This commit is contained in:
parent
045bc6f668
commit
2b505ceaf4
|
@ -44,4 +44,12 @@ class UserAPIService extends APIService implements UserService {
|
||||||
Future<User> getCurrentUser() {
|
Future<User> getCurrentUser() {
|
||||||
return client.get('/user').then((map) => User.fromJson(map?.body));
|
return client.get('/user').then((map) => User.fromJson(map?.body));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<UserSettings?> setCurrentUserSettings(UserSettings userSettings) async {
|
||||||
|
return client.post('/user/settings/general', body: userSettings.toJson()).then((response) {
|
||||||
|
if(response == null) return null;
|
||||||
|
return userSettings;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,92 @@
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:vikunja_app/global.dart';
|
import 'package:vikunja_app/global.dart';
|
||||||
|
|
||||||
|
class UserSettings {
|
||||||
|
final int default_project_id;
|
||||||
|
final bool discoverable_by_email, discoverable_by_name, email_reminders_enabled;
|
||||||
|
final Map<String, dynamic>? frontend_settings;
|
||||||
|
final String language;
|
||||||
|
final String name;
|
||||||
|
final bool overdue_tasks_reminders_enabled;
|
||||||
|
final String overdue_tasks_reminders_time;
|
||||||
|
final String timezone;
|
||||||
|
final int week_start;
|
||||||
|
|
||||||
|
UserSettings({
|
||||||
|
this.default_project_id = 0,
|
||||||
|
this.discoverable_by_email = false,
|
||||||
|
this.discoverable_by_name = false,
|
||||||
|
this.email_reminders_enabled = false,
|
||||||
|
this.frontend_settings = null,
|
||||||
|
this.language = '',
|
||||||
|
this.name = '',
|
||||||
|
this.overdue_tasks_reminders_enabled = false,
|
||||||
|
this.overdue_tasks_reminders_time = '',
|
||||||
|
this.timezone = '',
|
||||||
|
this.week_start = 0,
|
||||||
|
});
|
||||||
|
|
||||||
|
UserSettings.fromJson(Map<String, dynamic> json)
|
||||||
|
: default_project_id = json['default_project_id'],
|
||||||
|
discoverable_by_email = json['discoverable_by_email'],
|
||||||
|
discoverable_by_name = json['discoverable_by_name'],
|
||||||
|
email_reminders_enabled = json['email_reminders_enabled'],
|
||||||
|
frontend_settings = json['frontend_settings'],
|
||||||
|
language = json['language'],
|
||||||
|
name = json['name'],
|
||||||
|
overdue_tasks_reminders_enabled = json['overdue_tasks_reminders_enabled'],
|
||||||
|
overdue_tasks_reminders_time = json['overdue_tasks_reminders_time'],
|
||||||
|
timezone = json['timezone'],
|
||||||
|
week_start = json['week_start'];
|
||||||
|
|
||||||
|
toJson() => {
|
||||||
|
'default_project_id': default_project_id,
|
||||||
|
'discoverable_by_email': discoverable_by_email,
|
||||||
|
'discoverable_by_name': discoverable_by_name,
|
||||||
|
'email_reminders_enabled': email_reminders_enabled,
|
||||||
|
'frontend_settings': frontend_settings,
|
||||||
|
'language': language,
|
||||||
|
'name': name,
|
||||||
|
'overdue_tasks_reminders_enabled': overdue_tasks_reminders_enabled,
|
||||||
|
'overdue_tasks_reminders_time': overdue_tasks_reminders_time,
|
||||||
|
'timezone': timezone,
|
||||||
|
'week_start': week_start,
|
||||||
|
};
|
||||||
|
|
||||||
|
UserSettings copyWith({
|
||||||
|
int? default_project_id,
|
||||||
|
bool? discoverable_by_email,
|
||||||
|
bool? discoverable_by_name,
|
||||||
|
bool? email_reminders_enabled,
|
||||||
|
Map<String, dynamic>? frontend_settings,
|
||||||
|
String? language,
|
||||||
|
String? name,
|
||||||
|
bool? overdue_tasks_reminders_enabled,
|
||||||
|
String? overdue_tasks_reminders_time,
|
||||||
|
String? timezone,
|
||||||
|
int? week_start,
|
||||||
|
}) {
|
||||||
|
return UserSettings(
|
||||||
|
default_project_id: default_project_id ?? this.default_project_id,
|
||||||
|
discoverable_by_email: discoverable_by_email ?? this.discoverable_by_email,
|
||||||
|
discoverable_by_name: discoverable_by_name ?? this.discoverable_by_name,
|
||||||
|
email_reminders_enabled: email_reminders_enabled ?? this.email_reminders_enabled,
|
||||||
|
frontend_settings: frontend_settings ?? this.frontend_settings,
|
||||||
|
language: language ?? this.language,
|
||||||
|
name: name ?? this.name,
|
||||||
|
overdue_tasks_reminders_enabled: overdue_tasks_reminders_enabled ?? this.overdue_tasks_reminders_enabled,
|
||||||
|
overdue_tasks_reminders_time: overdue_tasks_reminders_time ?? this.overdue_tasks_reminders_time,
|
||||||
|
timezone: timezone ?? this.timezone,
|
||||||
|
week_start: week_start ?? this.week_start,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class User {
|
class User {
|
||||||
final int id;
|
final int id;
|
||||||
final String name, username;
|
final String name, username;
|
||||||
final DateTime created, updated;
|
final DateTime created, updated;
|
||||||
|
UserSettings? settings;
|
||||||
|
|
||||||
User({
|
User({
|
||||||
this.id = 0,
|
this.id = 0,
|
||||||
|
@ -12,6 +94,7 @@ class User {
|
||||||
required this.username,
|
required this.username,
|
||||||
DateTime? created,
|
DateTime? created,
|
||||||
DateTime? updated,
|
DateTime? updated,
|
||||||
|
this.settings,
|
||||||
}) : this.created = created ?? DateTime.now(),
|
}) : this.created = created ?? DateTime.now(),
|
||||||
this.updated = updated ?? DateTime.now();
|
this.updated = updated ?? DateTime.now();
|
||||||
|
|
||||||
|
@ -20,7 +103,11 @@ class User {
|
||||||
name = json.containsKey('name') ? json['name'] : '',
|
name = json.containsKey('name') ? json['name'] : '',
|
||||||
username = json['username'],
|
username = json['username'],
|
||||||
created = DateTime.parse(json['created']),
|
created = DateTime.parse(json['created']),
|
||||||
updated = DateTime.parse(json['updated']);
|
updated = DateTime.parse(json['updated']) {
|
||||||
|
if(json.containsKey('settings')){
|
||||||
|
this.settings = UserSettings.fromJson(json['settings']);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
toJSON() => {
|
toJSON() => {
|
||||||
'id': id,
|
'id': id,
|
||||||
|
@ -28,6 +115,7 @@ class User {
|
||||||
'username': username,
|
'username': username,
|
||||||
'created': created.toUtc().toIso8601String(),
|
'created': created.toUtc().toIso8601String(),
|
||||||
'updated': updated.toUtc().toIso8601String(),
|
'updated': updated.toUtc().toIso8601String(),
|
||||||
|
'user_settings': settings?.toJson(),
|
||||||
};
|
};
|
||||||
|
|
||||||
String avatarUrl(BuildContext context) {
|
String avatarUrl(BuildContext context) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import 'package:vikunja_app/models/list.dart';
|
||||||
|
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
import '../models/project.dart';
|
import '../models/project.dart';
|
||||||
|
import '../models/user.dart';
|
||||||
import '../service/services.dart';
|
import '../service/services.dart';
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,6 +24,7 @@ class SettingsPageState extends State<SettingsPage> {
|
||||||
late TextEditingController durationTextController;
|
late TextEditingController durationTextController;
|
||||||
bool initialized = false;
|
bool initialized = false;
|
||||||
FlutterThemeMode? themeMode;
|
FlutterThemeMode? themeMode;
|
||||||
|
User? currentUser;
|
||||||
|
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
|
@ -33,9 +35,9 @@ class SettingsPageState extends State<SettingsPage> {
|
||||||
.getAll()
|
.getAll()
|
||||||
.then((value) => setState(() => projectList = value));
|
.then((value) => setState(() => projectList = value));
|
||||||
|
|
||||||
VikunjaGlobal.of(context).projectService.getDefaultList().then((value) =>
|
//VikunjaGlobal.of(context).projectService.getDefaultList().then((value) =>
|
||||||
setState(
|
// setState(
|
||||||
() => defaultProject = value == null ? null : int.tryParse(value)));
|
// () => defaultProject = value == null ? null : int.tryParse(value)));
|
||||||
|
|
||||||
VikunjaGlobal.of(context).settingsManager.getIgnoreCertificates().then(
|
VikunjaGlobal.of(context).settingsManager.getIgnoreCertificates().then(
|
||||||
(value) =>
|
(value) =>
|
||||||
|
@ -57,12 +59,20 @@ class SettingsPageState extends State<SettingsPage> {
|
||||||
|
|
||||||
VikunjaGlobal.of(context).settingsManager.getThemeMode().then((value) => setState(() => themeMode = value));
|
VikunjaGlobal.of(context).settingsManager.getThemeMode().then((value) => setState(() => themeMode = value));
|
||||||
|
|
||||||
|
VikunjaGlobal.of(context).newUserService?.getCurrentUser().then((value) => {
|
||||||
|
setState(() {
|
||||||
|
currentUser = value!;
|
||||||
|
defaultProject = value.settings?.default_project_id;
|
||||||
|
} ),
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final currentUser = VikunjaGlobal.of(context).currentUser;
|
final global = VikunjaGlobal.of(context);
|
||||||
|
|
||||||
if (!initialized) init();
|
if (!initialized) init();
|
||||||
return new Scaffold(
|
return new Scaffold(
|
||||||
|
@ -71,12 +81,12 @@ class SettingsPageState extends State<SettingsPage> {
|
||||||
body: ListView(
|
body: ListView(
|
||||||
children: [
|
children: [
|
||||||
UserAccountsDrawerHeader(
|
UserAccountsDrawerHeader(
|
||||||
accountName: currentUser != null ? Text(currentUser.username) : null,
|
accountName: currentUser != null ? Text(currentUser!.username) : null,
|
||||||
accountEmail: currentUser != null ? Text(currentUser.name) : null,
|
accountEmail: currentUser != null ? Text(currentUser!.name) : null,
|
||||||
currentAccountPicture: currentUser == null
|
currentAccountPicture: currentUser == null
|
||||||
? null
|
? null
|
||||||
: CircleAvatar(
|
: CircleAvatar(
|
||||||
backgroundImage: NetworkImage(currentUser.avatarUrl(context)),
|
backgroundImage: (currentUser?.username != "") ? NetworkImage(currentUser!.avatarUrl(context)) : null,
|
||||||
),
|
),
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
image: DecorationImage(
|
image: DecorationImage(
|
||||||
|
@ -103,9 +113,9 @@ class SettingsPageState extends State<SettingsPage> {
|
||||||
value: defaultProject,
|
value: defaultProject,
|
||||||
onChanged: (int? value) {
|
onChanged: (int? value) {
|
||||||
setState(() => defaultProject = value);
|
setState(() => defaultProject = value);
|
||||||
VikunjaGlobal.of(context)
|
global.newUserService?.setCurrentUserSettings(
|
||||||
.listService
|
currentUser!.settings!.copyWith(default_project_id: value)).then((value) => currentUser!.settings = value);
|
||||||
.setDefaultList(value);
|
//VikunjaGlobal.of(context).userManager.setDefaultList(value);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -212,5 +212,11 @@ class MockedUserService implements UserService {
|
||||||
return Future.value(_users[1]);
|
return Future.value(_users[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<UserSettings> setCurrentUserSettings(UserSettings userSettings) {
|
||||||
|
// TODO: implement setCurrentUserSettings
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,7 +191,7 @@ abstract class ListService {
|
||||||
|
|
||||||
Future<String?> getDefaultList();
|
Future<String?> getDefaultList();
|
||||||
|
|
||||||
void setDefaultList(int? listId);
|
//void setDefaultList(int? listId);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class TaskService {
|
abstract class TaskService {
|
||||||
|
@ -235,6 +235,7 @@ abstract class UserService {
|
||||||
Future<UserTokenPair?> register(String username, email, password);
|
Future<UserTokenPair?> register(String username, email, password);
|
||||||
|
|
||||||
Future<User?> getCurrentUser();
|
Future<User?> getCurrentUser();
|
||||||
|
Future<UserSettings?> setCurrentUserSettings(UserSettings userSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class LabelService {
|
abstract class LabelService {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user