Commit 17b3b71

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-02 13:00:14
add columns architecture
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 56b1e82
Changed files (2)
lib
model
lib/model/export_import/column.dart
@@ -37,6 +37,12 @@ class NativeColumn extends ExportColumn {
     (pattern) => int.tryParse(pattern)
   );
   static final NativeColumn pulse = NativeColumn._create(
+    'pulse',
+    RowDataFieldType.pul,
+    (record) => record.pulse.toString(),
+    (pattern) => pattern
+  );
+  static final NativeColumn notes = NativeColumn._create(
     'notes',
     RowDataFieldType.notes,
     (record) => record.notes,
lib/model/storage/export_columns_store.dart
@@ -8,7 +8,9 @@ class ExportColumnsManager extends ChangeNotifier { // TODO: separate ExportColu
   /// Create a new class for managing export columns.
   ///
   /// It will be filled with the default columns but won't contain initial user columns.
-  ExportColumnsManager();
+  ExportColumnsManager({
+    this.activePreset = ExportImportPreset.bloodPressureApp
+  });
 
   static const List<String> reservedNamespaces = ['buildIn', 'myHeart'];
 
@@ -40,6 +42,25 @@ class ExportColumnsManager extends ChangeNotifier { // TODO: separate ExportColu
     notifyListeners();
   }
 
+  final List<String> _activeColumnIDs = []; // TODO import/export
+  ExportImportPreset activePreset;
+
+  List<ExportColumn> getActiveColumns() => switch (activePreset) {
+    // TODO: Handle this case.
+    ExportImportPreset.none => [],
+    // TODO: Handle this case.
+    ExportImportPreset.bloodPressureApp => [
+      NativeColumn.timestamp,
+      NativeColumn.systolic,
+      NativeColumn.diastolic,
+      NativeColumn.pulse,
+      NativeColumn.notes,
+      NativeColumn.color,
+    ],
+    // TODO: Handle this case.
+    ExportImportPreset.myHeart => [],
+  }
+
   String toJson() {
     final columns = [];
     for (final c in _userColumns.values) {
@@ -56,12 +77,17 @@ class ExportColumnsManager extends ChangeNotifier { // TODO: separate ExportColu
           assert(false, 'User is currently not able to create native columns.');
       }
     }
-    return jsonEncode({'userColumns': columns});
+    return jsonEncode({
+      'userColumns': columns,
+      'preset': activePreset.encode(),
+    });
   }
 
   factory ExportColumnsManager.fromJson(String jsonString) {
-    final List<dynamic> jsonUserColumns = jsonDecode(jsonString)['userColumns'];
-    final manager = ExportColumnsManager();
+    final json = jsonDecode(jsonString);
+    final ExportImportPreset preset = ExportImportPreset.decode(json['preset']) ?? ExportImportPreset.bloodPressureApp;
+    final List<dynamic> jsonUserColumns = json['userColumns'];
+    final manager = ExportColumnsManager(activePreset: preset);
     for (final Map<String, dynamic> c in jsonUserColumns) {
       switch (c['t']) {
         case 0:
@@ -74,4 +100,31 @@ class ExportColumnsManager extends ChangeNotifier { // TODO: separate ExportColu
 
     return manager;
   }
+}
+
+enum ExportImportPreset {
+  /// Custom export configuration.
+  none,
+
+  /// Default preset, that ensures working exports and restoration.
+  bloodPressureApp,
+  myHeart;
+
+  int encode() => switch (this) {
+    ExportImportPreset.none => 0,
+    ExportImportPreset.bloodPressureApp => 1,
+    ExportImportPreset.myHeart => 2
+  };
+
+  static ExportImportPreset? decode(dynamic e) {
+    return switch(e) {
+      0 => ExportImportPreset.none,
+      1 => ExportImportPreset.bloodPressureApp,
+      2 => ExportImportPreset.myHeart,
+      _ => (){
+        assert(false);
+        return null;
+      }(),
+    };
+  }
 }
\ No newline at end of file