Commit 84288a1
Changed files (2)
lib
components
dialoges
screens
subsettings
lib/components/dialoges/tree_selection_dialoge.dart
@@ -188,6 +188,9 @@ class _TreeSelectionDialogeState extends State<TreeSelectionDialoge>
textColor: Theme.of(context).colorScheme.error,
titleTextStyle: Theme.of(context).textTheme.labelLarge,
),
+
+ // TODO: don't rebuild when validation error
+ // TODO: backwards navigation
],
);
}
lib/screens/subsettings/foreign_db_import_screen.dart
@@ -35,17 +35,25 @@ class _ForeignDBImportScreenState extends State<ForeignDBImportScreen> {
if ((selections.length % 2 == 0)) {
final columns = data.columns[selections[0]]!;
- columns.remove(selections[1]);
- return columns;
+ return columns.whereNot((e) => selections.contains(e)).toList();
} else {
return RowDataFieldType.values
- .whereNot((element) => element == RowDataFieldType.timestamp)
+ .whereNot((e) => e == RowDataFieldType.timestamp
+ || selections.contains(e),)
.map((e) => e.localize(localizations))
.toList();
}
},
- validator: (todo) { // TODO
- return 'The schnibledumps doesn\'t schwibble!';
+ validator: (elements) {
+ const kMetaColumns = 2;
+ if (elements.isEmpty) return 'No table selected';
+ if (elements.length < kMetaColumns) return 'No time column selected';
+ if (elements.length % 2 != kMetaColumns % 2) {
+ return 'Select a data column or return to last screen';
+ }
+ if (elements.length < 4) return 'Select at least one data column';
+
+ return 'The schnibledumps doesn\'t schwibble!'; // TODO
},
buildTitle: (selections) {
if (selections.isEmpty) return 'Select table';
@@ -60,6 +68,7 @@ class _ForeignDBImportScreenState extends State<ForeignDBImportScreen> {
);
// TODO: perform import
// TODO: localize everything
+ // TODO: detect when no more selections are possible
},
);
}
@@ -79,7 +88,7 @@ class _ColumnImportData {
final colNames = RegExp(r'CREATE\s+TABLE\s+[0-9\w]+\s*\(([\w\s()0-9,]+?)\)+')
.firstMatch(creationSql)
?.group(1)
- ?.split(',')
+ ?.split(RegExp(r'[,()]'))
.map((e) => e
.split(' ')
.where((e) => e.isNotEmpty)
@@ -90,6 +99,7 @@ class _ColumnImportData {
.firstWhereOrNull((e) => e.trim().isNotEmpty),
)
.whereNotNull()
+ .toSet() // remove duplicates
.toList();
print('$creationSql:\t $colNames');
// don't show tables without columns