Commit 531fa00
Changed files (4)
app
lib
l10n
model
app/lib/l10n/app_en.arb
@@ -512,5 +512,7 @@
"deleteAllNotes": "Delete all notes",
"@deleteAllNotes": {},
"date": "Date",
- "@date": {}
+ "@date": {},
+ "intakes": "Medicine intakes",
+ "@intakes": {}
}
\ No newline at end of file
app/lib/model/export_import/column.dart
@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:blood_pressure_app/model/export_import/export_configuration.dart';
import 'package:blood_pressure_app/model/export_import/import_field_type.dart';
import 'package:blood_pressure_app/model/export_import/record_formatter.dart';
+import 'package:blood_pressure_app/model/storage/convert_util.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:health_data_store/health_data_store.dart';
@@ -23,6 +24,7 @@ class NativeColumn extends ExportColumn {
notes,
color,
needlePin,
+ intakes,
];
static final NativeColumn timestampUnixMs = NativeColumn._create(
@@ -87,10 +89,36 @@ class NativeColumn extends ExportColumn {
return null;
}
);
+ // TODO: add to default export columns, use during importing
+ static final NativeColumn intakes = NativeColumn._create(
+ 'intakes',
+ RowDataFieldType.intakes,
+ (_, __, intakes) => intakes
+ .map((i) => '${i.medicine.designation}(${i.dosis.mg})')
+ .join('|'),
+ (String pattern) {
+ if (pattern.isEmpty) return [];
+ final intakes = [];
+ for (final e in pattern.split('|')) {
+ final es = e.split('(');
+ if (es.length < 2) return null;
+ final [med, dosisStr, ...] = es;
+ final dosis = ConvertUtil.parseDouble(dosisStr.replaceAll(')', ''));
+ if (dosis == null) return null;
+ intakes.add((med, dosis));
+ return intakes;
+ }
+ final value = int.tryParse(pattern);
+ return value;
+ }
+ );
final String _csvTitle;
final RowDataFieldType _restoreableType;
final String Function(BloodPressureRecord record, Note note, List<MedicineIntake> intakes) _encode;
+ /// Function to attempt decoding.
+ ///
+ /// Must either return null or the type indicated by [_restoreableType].
final Object? Function(String pattern) _decode;
@override
app/lib/model/export_import/import_field_type.dart
@@ -19,7 +19,9 @@ enum RowDataFieldType {
/// Guarantees that a [int] containing a [Color.value] is returned.
///
/// Backwards compatability with [MeasurementNeedlePin] json is maintained.
- color;
+ color,
+ /// Guarantees [List<(String medicineDesignation, int dosisMg)>] is returned.
+ intakes;
/// Selection of a displayable string from [localizations].
String localize(AppLocalizations localizations) {
@@ -36,6 +38,8 @@ enum RowDataFieldType {
return localizations.notes;
case RowDataFieldType.color:
return localizations.color;
+ case RowDataFieldType.intakes:
+ return localizations.intakes;
}
}
}
app/lib/model/export_import/record_formatter.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:blood_pressure_app/model/blood_pressure/needle_pin.dart';
+import 'package:blood_pressure_app/model/export_import/column.dart';
import 'package:blood_pressure_app/model/export_import/import_field_type.dart';
import 'package:function_tree/function_tree.dart';
import 'package:health_data_store/health_data_store.dart';
@@ -65,6 +66,8 @@ class ScriptedFormatter implements Formatter {
} on TypeError {
return null;
}
+ case RowDataFieldType.intakes:
+ return NativeColumn.intakes.decode(text);
}}();
if (value != null) return (restoreAbleType!, value);
return null;