Commit 0b17bcd

derdilla <derdilla06@gmail.com>
2023-08-26 17:18:54
save pdf and csv item order separately
1 parent 0f3d92d
Changed files (3)
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());
       }