Commit ce07dd21 authored by Administrator's avatar Administrator

FilterWidget extracted, filtering enabled on all athlete widgets

parent 70434436
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_secure_storage","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.3/","dependencies":[]},{"name":"path_provider","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.8/","dependencies":[]},{"name":"shared_preferences","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.7+2/","dependencies":[]},{"name":"sqflite","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0+1/","dependencies":[]},{"name":"uni_links","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/uni_links-0.4.0/","dependencies":[]},{"name":"url_launcher","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.7/","dependencies":[]}],"android":[{"name":"flutter_secure_storage","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.3/","dependencies":[]},{"name":"path_provider","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.8/","dependencies":[]},{"name":"shared_preferences","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.7+2/","dependencies":[]},{"name":"sqflite","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0+1/","dependencies":[]},{"name":"uni_links","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/uni_links-0.4.0/","dependencies":[]},{"name":"url_launcher","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.7/","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-0.0.4+2/","dependencies":[]},{"name":"shared_preferences_macos","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+8/","dependencies":[]},{"name":"sqflite","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0+1/","dependencies":[]},{"name":"url_launcher_macos","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-0.0.1+5/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"shared_preferences_web","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+5/","dependencies":[]},{"name":"url_launcher_web","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-0.1.1+5/","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_secure_storage","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_macos"]},{"name":"path_provider_macos","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"uni_links","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_web","url_launcher_macos"]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]}],"date_created":"2020-06-03 11:37:44.263994","version":"1.17.1"}
\ No newline at end of file
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_secure_storage","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.3/","dependencies":[]},{"name":"path_provider","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.8/","dependencies":[]},{"name":"shared_preferences","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.7+2/","dependencies":[]},{"name":"sqflite","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0+1/","dependencies":[]},{"name":"uni_links","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/uni_links-0.4.0/","dependencies":[]},{"name":"url_launcher","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.7/","dependencies":[]}],"android":[{"name":"flutter_secure_storage","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.3/","dependencies":[]},{"name":"path_provider","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-1.6.8/","dependencies":[]},{"name":"shared_preferences","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.5.7+2/","dependencies":[]},{"name":"sqflite","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0+1/","dependencies":[]},{"name":"uni_links","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/uni_links-0.4.0/","dependencies":[]},{"name":"url_launcher","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.7/","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-0.0.4+2/","dependencies":[]},{"name":"shared_preferences_macos","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_macos-0.0.1+8/","dependencies":[]},{"name":"sqflite","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/sqflite-1.3.0+1/","dependencies":[]},{"name":"url_launcher_macos","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-0.0.1+5/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"shared_preferences_web","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences_web-0.1.2+5/","dependencies":[]},{"name":"url_launcher_web","path":"/home/stefan/flutter/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-0.1.1+5/","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_secure_storage","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_macos"]},{"name":"path_provider_macos","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"uni_links","dependencies":[]},{"name":"url_launcher","dependencies":["url_launcher_web","url_launcher_macos"]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]}],"date_created":"2020-06-03 17:00:55.581762","version":"1.17.1"}
\ No newline at end of file
import 'package:encrateia/models/activity_list.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:encrateia/models/weight.dart';
import 'package:encrateia/utils/athlete_time_series_chart.dart';
import 'package:encrateia/utils/enums.dart';
......@@ -5,17 +7,21 @@ import 'package:flutter/material.dart';
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/activity.dart';
import 'athlete_filter_widget.dart';
class AthleteEcorWidget extends StatefulWidget {
const AthleteEcorWidget({this.athlete});
final Athlete athlete;
@override
_AthleteEcorWidgetState createState() => _AthleteEcorWidgetState();
}
class _AthleteEcorWidgetState extends State<AthleteEcorWidget> {
List<Activity> activities = <Activity>[];
ActivityList<Activity> activities = ActivityList<Activity>(<Activity>[]);
List<TagGroup> tagGroups = <TagGroup>[];
String loadingStatus = 'Loading ...';
@override
void initState() {
......@@ -26,9 +32,22 @@ class _AthleteEcorWidgetState extends State<AthleteEcorWidget> {
@override
Widget build(BuildContext context) {
if (activities.isEmpty) {
return const Center(
child: Text('Loading'),
);
return ListView(children: <Widget>[
const SizedBox(
height: 50,
),
Center(
child: Text(loadingStatus),
),
const SizedBox(
height: 50,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]);
} else {
final List<Activity> ecorActivities = activities
.where((Activity activity) =>
......@@ -55,6 +74,11 @@ class _AthleteEcorWidgetState extends State<AthleteEcorWidget> {
chartTitleText: 'Ecor (kJ / kg / km)',
activityAttr: ActivityAttr.ecor,
athlete: widget.athlete,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
],
),
......@@ -65,10 +89,15 @@ class _AthleteEcorWidgetState extends State<AthleteEcorWidget> {
Future<void> getData() async {
final Athlete athlete = widget.athlete;
activities = await athlete.activities;
final List<Activity> unfilteredActivities = await athlete.activities;
tagGroups = await TagGroup.all(athlete: widget.athlete);
activities = await ActivityList<Activity>(unfilteredActivities).applyFilter(
athlete: widget.athlete,
tagGroups: tagGroups,
);
loadingStatus = activities.length.toString() + ' activities found';
// ignore: prefer_final_in_for_each
for (Activity activity in activities) {
for (final Activity activity in activities) {
final Weight weight = await Weight.getBy(
athletesId: activity.db.athletesId,
date: activity.db.timeCreated,
......
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:encrateia/screens/add_filter_screen.dart';
import 'package:encrateia/utils/my_button.dart';
import 'athlete_current_filter_widget.dart';
class AthleteFilterWidget extends StatelessWidget {
const AthleteFilterWidget({
@required this.athlete,
@required this.tagGroups,
@required this.callBackFunction
});
final Athlete athlete;
final List<TagGroup> tagGroups;
final Function callBackFunction;
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const SizedBox(height: 40),
AthleteCurrentFilterWidget(
athlete: athlete,
tagGroups: tagGroups,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
MyButton.add(
child: const Text('Add filter'),
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute<BuildContext>(
builder: (BuildContext context) => AddFilterScreen(
athlete: athlete,
),
),
);
callBackFunction();
},
),
const SizedBox(width: 20),
],
),
]);
}
}
import 'package:encrateia/models/activity_list.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:encrateia/utils/athlete_time_series_chart.dart';
import 'package:encrateia/utils/enums.dart';
import 'package:flutter/material.dart';
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/activity.dart';
import 'athlete_filter_widget.dart';
class AthletePowerPerHeartRateWidget extends StatefulWidget {
const AthletePowerPerHeartRateWidget({this.athlete});
final Athlete athlete;
@override
_AthletePowerPerHeartRateWidgetState createState() =>
_AthletePowerPerHeartRateWidgetState();
......@@ -16,7 +20,9 @@ class AthletePowerPerHeartRateWidget extends StatefulWidget {
class _AthletePowerPerHeartRateWidgetState
extends State<AthletePowerPerHeartRateWidget> {
List<Activity> activities = <Activity>[];
ActivityList<Activity> activities = ActivityList<Activity>(<Activity>[]);
List<TagGroup> tagGroups = <TagGroup>[];
String loadingStatus = 'Loading ...';
@override
void initState() {
......@@ -48,6 +54,11 @@ class _AthletePowerPerHeartRateWidgetState
chartTitleText: 'Average power per heart rate',
athlete: widget.athlete,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
),
],
),
);
......@@ -57,15 +68,34 @@ class _AthletePowerPerHeartRateWidgetState
);
}
} else {
return const Center(
child: Text('Loading'),
);
return ListView(children: <Widget>[
const SizedBox(
height: 50,
),
Center(
child: Text(loadingStatus),
),
const SizedBox(
height: 50,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]);
}
}
Future<void> getData() async {
final Athlete athlete = widget.athlete;
activities = await athlete.activities;
final List<Activity> unfilteredActivities = await athlete.activities;
tagGroups = await TagGroup.all(athlete: widget.athlete);
activities = await ActivityList<Activity>(unfilteredActivities).applyFilter(
athlete: widget.athlete,
tagGroups: tagGroups,
);
loadingStatus = activities.length.toString() + ' activities found';
setState(() {});
}
}
import 'package:encrateia/models/activity_list.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:encrateia/utils/athlete_time_series_chart.dart';
import 'package:encrateia/utils/enums.dart';
import 'package:flutter/material.dart';
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/activity.dart';
import 'athlete_filter_widget.dart';
class AthletePowerRatioWidget extends StatefulWidget {
const AthletePowerRatioWidget({this.athlete});
......@@ -15,7 +19,9 @@ class AthletePowerRatioWidget extends StatefulWidget {
}
class _AthletePowerRatioWidgetState extends State<AthletePowerRatioWidget> {
List<Activity> activities = <Activity>[];
ActivityList<Activity> activities = ActivityList<Activity>(<Activity>[]);
List<TagGroup> tagGroups = <TagGroup>[];
String loadingStatus = 'Loading ...';
@override
void initState() {
......@@ -46,6 +52,11 @@ class _AthletePowerRatioWidgetState extends State<AthletePowerRatioWidget> {
activityAttr: ActivityAttr.avgPowerRatio,
athlete: widget.athlete,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
),
],
),
);
......@@ -55,15 +66,34 @@ class _AthletePowerRatioWidgetState extends State<AthletePowerRatioWidget> {
);
}
} else {
return const Center(
child: Text('Loading'),
);
return ListView(children: <Widget>[
const SizedBox(
height: 50,
),
Center(
child: Text(loadingStatus),
),
const SizedBox(
height: 50,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]);
}
}
Future<void> getData() async {
final Athlete athlete = widget.athlete;
activities = await athlete.activities;
final List<Activity> unfilteredActivities = await athlete.activities;
tagGroups = await TagGroup.all(athlete: widget.athlete);
activities = await ActivityList<Activity>(unfilteredActivities).applyFilter(
athlete: widget.athlete,
tagGroups: tagGroups,
);
loadingStatus = activities.length.toString() + ' activities found';
setState(() {});
}
}
import 'package:encrateia/models/activity_list.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:encrateia/screens/add_filter_screen.dart';
import 'package:encrateia/utils/athlete_time_series_chart.dart';
import 'package:encrateia/utils/enums.dart';
import 'package:encrateia/utils/my_button.dart';
import 'package:flutter/material.dart';
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/activity.dart';
import 'athlete_current_filter_widget.dart';
import 'athlete_filter_widget.dart';
class AthletePowerWidget extends StatefulWidget {
const AthletePowerWidget({this.athlete});
......@@ -41,17 +40,20 @@ class _AthletePowerWidgetState extends State<AthletePowerWidget> {
return ListTileTheme(
iconColor: Colors.orange,
child: ListView(
padding: const EdgeInsets.only(left: 25),
children: <Widget>[
AthleteTimeSeriesChart(
activities: powerActivities,
chartTitleText: 'Power (W)',
activityAttr: ActivityAttr.avgPower,
athlete: widget.athlete,
),
] +
filterWidgets(),
),
padding: const EdgeInsets.only(left: 25),
children: <Widget>[
AthleteTimeSeriesChart(
activities: powerActivities,
chartTitleText: 'Power (W)',
activityAttr: ActivityAttr.avgPower,
athlete: widget.athlete,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]),
);
} else {
return const Center(
......@@ -59,15 +61,22 @@ class _AthletePowerWidgetState extends State<AthletePowerWidget> {
);
}
} else {
return ListView(
children: <Widget>[
const SizedBox(height: 50,),
Center(
child: Text(loadingStatus),
),
const SizedBox(height: 50,),
] +
filterWidgets());
return ListView(children: <Widget>[
const SizedBox(
height: 50,
),
Center(
child: Text(loadingStatus),
),
const SizedBox(
height: 50,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]);
}
}
......@@ -82,34 +91,4 @@ class _AthletePowerWidgetState extends State<AthletePowerWidget> {
loadingStatus = activities.length.toString() + ' activities found';
setState(() {});
}
List<Widget> filterWidgets() {
return <Widget>[
const SizedBox(height: 40),
AthleteCurrentFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
MyButton.add(
child: const Text('Add filter'),
onPressed: () async {
await Navigator.push(
context,
MaterialPageRoute<BuildContext>(
builder: (BuildContext context) => AddFilterScreen(
athlete: widget.athlete,
),
),
);
getData();
},
),
const SizedBox(width: 20),
],
),
];
}
}
import 'package:encrateia/models/activity_list.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:encrateia/utils/athlete_time_series_chart.dart';
import 'package:encrateia/utils/enums.dart';
import 'package:flutter/material.dart';
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/activity.dart';
import 'athlete_filter_widget.dart';
class AthleteSpeedPerHeartRateWidget extends StatefulWidget {
const AthleteSpeedPerHeartRateWidget({this.athlete});
final Athlete athlete;
@override
_AthleteSpeedPerHeartRateWidgetState createState() =>
_AthleteSpeedPerHeartRateWidgetState();
......@@ -16,7 +20,9 @@ class AthleteSpeedPerHeartRateWidget extends StatefulWidget {
class _AthleteSpeedPerHeartRateWidgetState
extends State<AthleteSpeedPerHeartRateWidget> {
List<Activity> activities = <Activity>[];
ActivityList<Activity> activities = ActivityList<Activity>(<Activity>[]);
List<TagGroup> tagGroups = <TagGroup>[];
String loadingStatus = 'Loading ...';
@override
void initState() {
......@@ -48,6 +54,11 @@ class _AthleteSpeedPerHeartRateWidgetState
chartTitleText: 'Average speed per heart rate',
athlete: widget.athlete,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
),
],
),
);
......@@ -57,17 +68,37 @@ class _AthleteSpeedPerHeartRateWidgetState
);
}
} else {
return const Center(
child: Text('Loading'),
);
return ListView(children: <Widget>[
const SizedBox(
height: 50,
),
Center(
child: Text(loadingStatus),
),
const SizedBox(
height: 50,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]);
}
}
Future<void> getData() async {
final Athlete athlete = widget.athlete;
activities = await athlete.activities;
activities =
activities.where((Activity activity) => activity.db.sport == 'running').toList();
List<Activity> unfilteredActivities = await athlete.activities;
unfilteredActivities = unfilteredActivities
.where((Activity activity) => activity.db.sport == 'running')
.toList();
tagGroups = await TagGroup.all(athlete: widget.athlete);
activities = await ActivityList<Activity>(unfilteredActivities).applyFilter(
athlete: widget.athlete,
tagGroups: tagGroups,
);
loadingStatus = activities.length.toString() + ' activities found';
setState(() {});
}
}
import 'package:encrateia/models/activity_list.dart';
import 'package:encrateia/models/tag_group.dart';
import 'package:encrateia/utils/athlete_time_series_chart.dart';
import 'package:encrateia/utils/enums.dart';
import 'package:flutter/material.dart';
import 'package:encrateia/models/athlete.dart';
import 'package:encrateia/models/activity.dart';
import 'athlete_filter_widget.dart';
class AthleteStrideRatioWidget extends StatefulWidget {
const AthleteStrideRatioWidget({this.athlete});
......@@ -15,7 +19,9 @@ class AthleteStrideRatioWidget extends StatefulWidget {
}
class _AthleteStrideRatioWidgetState extends State<AthleteStrideRatioWidget> {
List<Activity> activities = <Activity>[];
ActivityList<Activity> activities = ActivityList<Activity>(<Activity>[]);
List<TagGroup> tagGroups = <TagGroup>[];
String loadingStatus = 'Loading ...';
@override
void initState() {
......@@ -43,6 +49,11 @@ class _AthleteStrideRatioWidgetState extends State<AthleteStrideRatioWidget> {
chartTitleText: 'Stride Ratio',
athlete: widget.athlete,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
),
],
),
);
......@@ -52,15 +63,34 @@ class _AthleteStrideRatioWidgetState extends State<AthleteStrideRatioWidget> {
);
}
} else {
return const Center(
child: Text('Loading'),
);
return ListView(children: <Widget>[
const SizedBox(
height: 50,
),
Center(
child: Text(loadingStatus),
),
const SizedBox(
height: 50,
),
AthleteFilterWidget(
athlete: widget.athlete,
tagGroups: tagGroups,
callBackFunction: getData,
)
]);
}
}
Future<void> getData() async {
final Athlete athlete = widget.athlete;
activities = await athlete.activities;
final List<Activity> unfilteredActivities = await athlete.activities;
tagGroups = await TagGroup.all(athlete: widget.athlete);
activities = await ActivityList<Activity>(unfilteredActivities).applyFilter(
athlete: widget.athlete,
tagGroups: tagGroups,
);
loadingStatus = activities.length.toString() + ' activities found';
setState(() {});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment