Table dropping implemented
This commit is contained in:
parent
529ec239d1
commit
d973954a75
4 changed files with 114 additions and 4 deletions
|
|
@ -92,8 +92,9 @@ class ApiClient {
|
||||||
return ErrorOrData(data, error);
|
return ErrorOrData(data, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
FutureErrorOrData<void> createTable(
|
FutureErrorOrData<bool> createTable(
|
||||||
String tableName, List<TableField> columns) async {
|
String tableName, List<TableField> columns) async {
|
||||||
|
bool? ignored;
|
||||||
Exception? error;
|
Exception? error;
|
||||||
|
|
||||||
final response =
|
final response =
|
||||||
|
|
@ -107,6 +108,8 @@ class ApiClient {
|
||||||
final body = json.decode(await response.stream.bytesToString());
|
final body = json.decode(await response.stream.bytesToString());
|
||||||
if (body['error'] != null) {
|
if (body['error'] != null) {
|
||||||
error = Exception(body['error']);
|
error = Exception(body['error']);
|
||||||
|
} else {
|
||||||
|
ignored = true;
|
||||||
}
|
}
|
||||||
} else if (response.statusCode == 422) {
|
} else if (response.statusCode == 422) {
|
||||||
error = Exception('Invalid request parameters');
|
error = Exception('Invalid request parameters');
|
||||||
|
|
@ -114,7 +117,29 @@ class ApiClient {
|
||||||
error = Exception('HTTP ${response.statusCode}');
|
error = Exception('HTTP ${response.statusCode}');
|
||||||
}
|
}
|
||||||
|
|
||||||
return ErrorOrData(null, error);
|
return ErrorOrData(ignored, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
FutureErrorOrData<bool> dropTable(String tableName) async {
|
||||||
|
bool? ignored;
|
||||||
|
Exception? error;
|
||||||
|
|
||||||
|
final response =
|
||||||
|
await post('/api/dropTable/${Uri.encodeComponent(tableName)}');
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final body = json.decode(await response.stream.bytesToString());
|
||||||
|
if (body['error'] != null) {
|
||||||
|
error = Exception(body['error']);
|
||||||
|
} else {
|
||||||
|
ignored = true;
|
||||||
|
}
|
||||||
|
} else if (response.statusCode == 422) {
|
||||||
|
error = Exception('Invalid request parameters');
|
||||||
|
} else {
|
||||||
|
error = Exception('HTTP ${response.statusCode}');
|
||||||
|
}
|
||||||
|
|
||||||
|
return ErrorOrData(ignored, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<StreamedResponse> get(
|
Future<StreamedResponse> get(
|
||||||
|
|
|
||||||
73
lib/pages/bottomsheets/open_table_bottomsheet.dart
Normal file
73
lib/pages/bottomsheets/open_table_bottomsheet.dart
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:recase/recase.dart';
|
||||||
|
import 'package:tuuli_app/api/api_client.dart';
|
||||||
|
import 'package:tuuli_app/api/model/tables_list_model.dart';
|
||||||
|
|
||||||
|
class OpenTableBottomSheet extends StatefulWidget {
|
||||||
|
final TableModel table;
|
||||||
|
|
||||||
|
const OpenTableBottomSheet({super.key, required this.table});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => _OpenTableBottomSheetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _OpenTableBottomSheetState extends State<OpenTableBottomSheet> {
|
||||||
|
final apiClient = Get.find<ApiClient>();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return SingleChildScrollView(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
widget.table.tableName.pascalCase,
|
||||||
|
style: Theme.of(context).textTheme.headlineSmall,
|
||||||
|
),
|
||||||
|
const Spacer(),
|
||||||
|
IconButton(
|
||||||
|
onPressed: _dropTable,
|
||||||
|
icon: const Icon(Icons.delete),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
onPressed: Get.back,
|
||||||
|
icon: const Icon(Icons.cancel),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Divider(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _dropTable() async {
|
||||||
|
final really = await Get.defaultDialog<bool>(
|
||||||
|
title: "Drop table",
|
||||||
|
middleText:
|
||||||
|
"Are you sure you want to drop this table \"${widget.table.tableName}\"?",
|
||||||
|
textConfirm: "Drop",
|
||||||
|
onConfirm: () => Get.back(result: true),
|
||||||
|
onCancel: () => Get.back(result: false),
|
||||||
|
barrierDismissible: false,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (really != true) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final result = await apiClient.dropTable(widget.table.tableName);
|
||||||
|
result.unfold((data) {
|
||||||
|
Get.back();
|
||||||
|
}, (error) {
|
||||||
|
Get.snackbar("Error", error.toString());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,8 @@ import 'package:recase/recase.dart';
|
||||||
import 'package:tuuli_app/api/api_client.dart';
|
import 'package:tuuli_app/api/api_client.dart';
|
||||||
import 'package:tuuli_app/api/model/tables_list_model.dart';
|
import 'package:tuuli_app/api/model/tables_list_model.dart';
|
||||||
import 'package:tuuli_app/c.dart';
|
import 'package:tuuli_app/c.dart';
|
||||||
import 'package:tuuli_app/pages/bottomsheers/edit_table_bottomsheet.dart';
|
import 'package:tuuli_app/pages/bottomsheets/edit_table_bottomsheet.dart';
|
||||||
|
import 'package:tuuli_app/pages/bottomsheets/open_table_bottomsheet.dart';
|
||||||
import 'package:tuuli_app/pages/home_page.dart';
|
import 'package:tuuli_app/pages/home_page.dart';
|
||||||
|
|
||||||
class TablesListPanel extends StatefulWidget {
|
class TablesListPanel extends StatefulWidget {
|
||||||
|
|
@ -184,6 +185,17 @@ class _TablesListPanelState extends State<TablesListPanel> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _openTable(TableModel table) async {
|
void _openTable(TableModel table) async {
|
||||||
// TODO: Open table
|
final result = await showFlexibleBottomSheet<void>(
|
||||||
|
minHeight: 1,
|
||||||
|
initHeight: 1,
|
||||||
|
maxHeight: 1,
|
||||||
|
context: context,
|
||||||
|
builder: (_, __, ___) => OpenTableBottomSheet(table: table),
|
||||||
|
anchors: [0, 0.5, 1],
|
||||||
|
isSafeArea: true,
|
||||||
|
isDismissible: false,
|
||||||
|
);
|
||||||
|
|
||||||
|
widget.parent.refreshData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue