Table dropping implemented

This commit is contained in:
Andrew 2023-04-11 16:11:58 +07:00
parent 529ec239d1
commit d973954a75
4 changed files with 114 additions and 4 deletions

View file

@ -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(

View 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());
});
}
}

View file

@ -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();
} }
} }