Commit 0b17bcd
Changed files (3)
lib
components
model
screens
subsettings
lib/components/export_item_order.dart
@@ -10,7 +10,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
-// TODO: save item order to pdf / csv depending on selection
class ExportItemsCustomizer extends StatefulWidget {
final List<ExportColumn> shownItems;
final List<ExportColumn> disabledItems;
lib/model/settings_store.dart
@@ -570,6 +570,7 @@ class Settings extends ChangeNotifier {
notifyListeners();
}
+ /// whether to add a section with all entries to pdf export
bool get exportPdfExportData {
return _prefs.getBool('exportPdfExportData') ?? true;
}
lib/screens/subsettings/export_import_screen.dart
@@ -192,10 +192,17 @@ class _ExportFieldCustomisationSettingState extends State<ExportFieldCustomisati
future: _future!,
onData: (context, result) {
return Consumer<Settings>(builder: (context, settings, child) {
+ /// whether or not the currently selected export format supports field customization
+ final isApplicable = (settings.exportFormat == ExportFormat.csv || settings.exportFormat == ExportFormat.pdf &&
+ settings.exportPdfExportData);
+ final exportCustomEntries = (settings.exportFormat == ExportFormat.csv) ?
+ settings.exportCustomEntriesCsv : settings.exportCustomEntriesPdf;
+ final exportItems = (settings.exportFormat == ExportFormat.csv) ? settings.exportItemsCsv : settings.exportItemsPdf;
+
final formats = result.availableFormats.toSet();
List<ExportColumn> activeFields = [];
List<ExportColumn> hiddenFields = [];
- for (final internalName in settings.exportItemsCsv) {
+ for (final internalName in exportItems) {
activeFields.add(formats.singleWhere((e) => e.internalName == internalName));
formats.removeWhere((e) => e.internalName == internalName);
}
@@ -205,20 +212,30 @@ class _ExportFieldCustomisationSettingState extends State<ExportFieldCustomisati
children: [
SwitchSettingsTile(
title: Text(localizations.exportCustomEntries),
- initialValue: settings.exportCustomEntriesCsv,
- disabled: !(settings.exportFormat == ExportFormat.csv || settings.exportFormat == ExportFormat.pdf &&
- settings.exportPdfExportData),
+ initialValue: exportCustomEntries,
+ disabled: !isApplicable,
onToggle: (value) {
- settings.exportCustomEntriesCsv = value;
+ if (settings.exportFormat == ExportFormat.csv) {
+ settings.exportCustomEntriesCsv = value;
+ } else {
+ assert(settings.exportFormat == ExportFormat.pdf);
+ settings.exportCustomEntriesPdf = value;
+ }
+
}
),
- (settings.exportCustomEntriesCsv && (settings.exportFormat == ExportFormat.csv || settings.exportFormat == ExportFormat.pdf &&
- settings.exportPdfExportData)) ?
+ (exportCustomEntries && isApplicable) ?
ExportItemsCustomizer(
shownItems: activeFields,
disabledItems: hiddenFields,
onReorder: (exportItems, exportAddableItems) {
- settings.exportItemsCsv = exportItems.map((e) => e.internalName).toList();
+ if (settings.exportFormat == ExportFormat.csv) {
+ settings.exportItemsCsv = exportItems.map((e) => e.internalName).toList();
+ } else {
+ assert(settings.exportFormat == ExportFormat.pdf);
+ settings.exportItemsPdf = exportItems.map((e) => e.internalName).toList();
+ }
+
},
) : const SizedBox.shrink()
],
@@ -284,17 +301,21 @@ class _ExportWarnBannerState extends State<ExportWarnBanner> {
final localizations = AppLocalizations.of(context)!;
String? message;
return Consumer<Settings>(builder: (context, settings, child) {
+ final exportItems = (settings.exportFormat == ExportFormat.csv) ? settings.exportItemsCsv : settings.exportItemsPdf;
+ final exportCustomEntries = (settings.exportFormat == ExportFormat.csv) ?
+ settings.exportCustomEntriesCsv : settings.exportCustomEntriesPdf;
+
if (_showWarnBanner && ![ExportFormat.csv, ExportFormat.db].contains(settings.exportFormat) ||
settings.exportCsvHeadline == false ||
- settings.exportCustomEntriesCsv && !(['timestampUnixMs'].any((i) => settings.exportItemsCsv.contains(i))) ||
+ exportCustomEntries && !(['timestampUnixMs'].any((i) => exportItems.contains(i))) ||
![',', '|'].contains(settings.csvFieldDelimiter) ||
!['"', '\''].contains(settings.csvTextDelimiter)
) {
message = localizations.exportWarnConfigNotImportable;
- } else if (_showWarnBanner && settings.exportCustomEntriesCsv &&
- !(['systolic','diastolic', 'pulse', 'notes'].every((i) => settings.exportItemsCsv.contains(i)))) {
+ } else if (_showWarnBanner && exportCustomEntries &&
+ !(['systolic','diastolic', 'pulse', 'notes'].every((i) => exportItems.contains(i)))) {
var missingAttributes = {'systolic','diastolic', 'pulse', 'notes'};
- missingAttributes.removeWhere((e) => settings.exportItemsCsv.contains(e));
+ missingAttributes.removeWhere((e) => exportItems.contains(e));
message = localizations.exportWarnNotEveryFieldExported(missingAttributes.length, missingAttributes.toString());
}