From 1c23e3be2c0a6cf1c11c421a0d44f3f00cbf22a2 Mon Sep 17 00:00:00 2001
From: doodlezucc <electerminator@gmail.com>
Date: Wed, 25 Oct 2023 12:54:15 +0200
Subject: [PATCH] display relative week instead of exact date

---
 lib/toolbar/date_selector.dart | 37 ++++++++++++++++++++++------------
 lib/toolbar/toolbar.dart       |  2 +-
 lib/util/date_extension.dart   |  4 ++++
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/lib/toolbar/date_selector.dart b/lib/toolbar/date_selector.dart
index fe49b95..a5152d7 100644
--- a/lib/toolbar/date_selector.dart
+++ b/lib/toolbar/date_selector.dart
@@ -11,6 +11,26 @@ class DateSelector extends StatelessWidget {
   final DateSelectedCallback onSelect;
   final DateTime date;
 
+  String get weekRelativeString {
+    final currentWeekStart = DateTime.now().atStartOfWeek();
+    final selectedWeekStart = date.atStartOfWeek();
+
+    final difference = selectedWeekStart.difference(currentWeekStart);
+    final differenceInWeeks = (difference.inHours / 24 / 7).round();
+
+    if (differenceInWeeks >= 2) {
+      return 'In $differenceInWeeks Wochen';
+    } else if (differenceInWeeks == 1) {
+      return 'Nächste Woche';
+    } else if (differenceInWeeks <= -2) {
+      return 'Vor ${differenceInWeeks.abs()} Wochen';
+    } else if (differenceInWeeks == -1) {
+      return 'Letzte Woche';
+    }
+
+    return 'Aktuell';
+  }
+
   const DateSelector({
     super.key,
     required this.date,
@@ -21,23 +41,14 @@ class DateSelector extends StatelessWidget {
     const duration = oneWeek;
 
     if (forward) {
-      onSelect(date.add(duration));
+      onSelect(date.add(duration).atStartOfWeek());
     } else {
-      onSelect(date.subtract(duration));
+      onSelect(date.subtract(duration).atStartOfWeek());
     }
   }
 
   void onTap(BuildContext context) async {
-    final result = await showDatePicker(
-      context: context,
-      initialDate: date,
-      firstDate: DateTime(2000, 1, 1),
-      lastDate: DateTime.now().add(const Duration(days: 60)),
-    );
-
-    if (result != null) {
-      onSelect(result);
-    }
+    onSelect(DateTime.now().atStartOfWeek());
   }
 
   @override
@@ -53,7 +64,7 @@ class DateSelector extends StatelessWidget {
           child: SizedBox(
             width: 100,
             child: Text(
-              date.format(),
+              weekRelativeString,
               textAlign: TextAlign.center,
             ),
           ),
diff --git a/lib/toolbar/toolbar.dart b/lib/toolbar/toolbar.dart
index 1b6726b..1273b0a 100644
--- a/lib/toolbar/toolbar.dart
+++ b/lib/toolbar/toolbar.dart
@@ -18,8 +18,8 @@ class _ToolbarState extends State<Toolbar> {
     return Container(
       color: Theme.of(context).colorScheme.background,
       child: Row(
+        mainAxisAlignment: MainAxisAlignment.center,
         children: [
-          Expanded(child: Container()),
           DateSelector(
             date: widget.appContext.date.value,
             onSelect: (v) => setState(() {
diff --git a/lib/util/date_extension.dart b/lib/util/date_extension.dart
index 2445e58..c7042b8 100644
--- a/lib/util/date_extension.dart
+++ b/lib/util/date_extension.dart
@@ -22,4 +22,8 @@ extension DateExtension on DateTime {
 
     return '$dd.$mm.$year';
   }
+
+  DateTime atStartOfWeek() {
+    return subtract(Duration(days: weekday - 1));
+  }
 }
-- 
GitLab