Commit 336fc84

derdilla <derdilla06@gmail.com>
2023-08-02 12:56:40
allow deleting custom fields
1 parent 97bf77a
Changed files (5)
lib/components/export_item_order.dart
@@ -99,6 +99,18 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
     return Row(
       mainAxisSize: MainAxisSize.min,
       children: [
+        if (data.editable)
+          IconButton(
+            onPressed: () async {
+              final config = await ExportConfigurationModel.get(Provider.of<Settings>(context, listen: false), AppLocalizations.of(context)!);
+              setState(() {
+                config.delete(data);
+              });
+            },
+            tooltip: AppLocalizations.of(context)!.delete,
+            icon: const Icon(Icons.delete),
+            color: Colors.red,
+          ),
         IconButton(
           onPressed: () {
             Navigator.of(context).push(MaterialPageRoute(builder: (context) =>
@@ -109,11 +121,14 @@ class _ExportItemsCustomizerState extends State<ExportItemsCustomizer> {
                   editable: data.editable,
                   onValidSubmit: (value) async {
                     final config = await ExportConfigurationModel.get(Provider.of<Settings>(context, listen: false), AppLocalizations.of(context)!);
-                    config.addOrUpdate(value);
+                    setState(() {
+                      config.addOrUpdate(value);
+                    });
                   },
                 )
             ));
           },
+          tooltip: AppLocalizations.of(context)!.edit,
           icon: const Icon(Icons.edit)
         ),
         const Icon(Icons.drag_handle),
lib/l10n/app_en.arb
@@ -375,5 +375,9 @@
   "@unixTimestamp": {},
   "errCantEditThis": "You can't edit this. Feel free to look at the values for creating a new entry.",
   "addExportformat": "Add exportformat",
-  "@addExportformat": {}
+  "@addExportformat": {},
+  "edit": "Edit",
+  "@edit": {},
+  "delete": "Delete",
+  "@delete": {}
 }
lib/model/export_import.dart
@@ -27,6 +27,7 @@ extension PdfCompatability on Color {
 }
 
 // TODO: respect new export columns
+// TODO: delete entries in list | button
 class ExportFileCreator {
   final Settings settings;
   final AppLocalizations localizations;
lib/model/export_options.dart
@@ -81,6 +81,13 @@ class ExportConfigurationModel {
     },);
   }
 
+  void delete(ExportColumn format) {
+    final existingEntries = _availableFormats.where((element) => (element.internalName == format.internalName) && element.editable);
+    assert(existingEntries.isNotEmpty, 'Tried to delete entry that doesn\'t exist');
+    _availableFormats.removeWhere((element) => element.internalName == format.internalName);
+    _database.delete('exportStrings', where: 'internalColumnName = ?', whereArgs: [format.internalName]);
+  }
+
   UnmodifiableListView<ExportColumn> get availableFormats => UnmodifiableListView(_availableFormats);
   UnmodifiableMapView<String, ExportColumn> get availableFormatsMap =>
       UnmodifiableMapView(Map.fromIterable(_availableFormats, key: (e) => e.internalName));
lib/screens/subsettings/export_column_data.dart
@@ -67,7 +67,7 @@ class _EditExportColumnPageState extends State<EditExportColumnPage> {
                                 setState(() {
                                   _displayName = value;
                                 });
-                                if (_editedInternalName) return;
+                                if (_editedInternalName || (widget.initialInternalName != null)) return;
                                 final asciiName = value.replaceAll(RegExp(r'[^A-Za-z0-9 ]'), '');
                                 final internalName = asciiName.replaceAllMapped(RegExp(r' (.)'), (match) {
                                   return match.group(1)!.toUpperCase();
@@ -83,6 +83,7 @@ class _EditExportColumnPageState extends State<EditExportColumnPage> {
                             key: Key('internalName$_internalNameKeyNr'), // it should update when display name is changed without unfocussing on edit
                             initialValue: _internalName,
                             decoration: InputDecoration(hintText: localizations.internalName),
+                            enabled: (widget.initialInternalName == null),
                             validator: (String? value) {
                               if (value == null || value.isEmpty || RegExp(r'[^A-Za-z0-9]').hasMatch(value)) {
                                 return localizations.errOnlyLatinCharactersAndArabicNumbers;