Commit 336fc84
Changed files (5)
lib
components
l10n
screens
subsettings
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;