From 94725964ea66e28b4660f01751a86c02c174a450 Mon Sep 17 00:00:00 2001 From: efrilm Date: Fri, 8 Aug 2025 13:45:03 +0700 Subject: [PATCH] fix: change position table --- .../datasources/table_remote_datasource.dart | 36 +++++++++++++++++++ lib/presentation/table/pages/table_page.dart | 20 ++++++----- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/lib/data/datasources/table_remote_datasource.dart b/lib/data/datasources/table_remote_datasource.dart index 412f706..bbfa719 100644 --- a/lib/data/datasources/table_remote_datasource.dart +++ b/lib/data/datasources/table_remote_datasource.dart @@ -131,4 +131,40 @@ class TableRemoteDataSource { return const Left('Unexpected error occurred'); } } + + Future> transferTable({ + required String fromTableId, + required String toTableId, + }) async { + try { + final authData = await AuthLocalDataSource().getAuthData(); + final url = '${Variables.baseUrl}/api/v1/tables/transfer'; + + final response = await dio.put( + url, + data: { + "from_table": fromTableId, + "to_table": toTableId, + }, + options: Options( + headers: { + 'Authorization': 'Bearer ${authData.token}', + 'Accept': 'application/json', + }, + ), + ); + + if (response.statusCode == 200 || response.statusCode == 201) { + return Right(true); + } else { + return const Left('Failed to create table'); + } + } on DioException catch (e) { + log("Dio error: ${e.message}"); + return Left(e.response?.data['message'] ?? 'Gagal membuat table'); + } catch (e) { + log("Unexpected error: $e"); + return const Left('Unexpected error occurred'); + } + } } diff --git a/lib/presentation/table/pages/table_page.dart b/lib/presentation/table/pages/table_page.dart index 5b424ca..6f1a096 100644 --- a/lib/presentation/table/pages/table_page.dart +++ b/lib/presentation/table/pages/table_page.dart @@ -43,6 +43,7 @@ class _TablePageState extends State { // Ubah function toggleSelectTable menjadi selectTable void selectTable(TableModel table) { + if (table.status == 'occupied') return; setState(() { if (selectedTable == table) { selectedTable = null; // Deselect jika table yang sama diklik @@ -115,6 +116,7 @@ class _TablePageState extends State { builder: (context, state) { return state.maybeWhen( orElse: () => SizedBox.shrink(), + loading: () => const Center(child: CircularProgressIndicator()), success: (tables) => SafeArea( child: Stack( children: [ @@ -207,15 +209,17 @@ class _TablePageState extends State { local.dx.clamp(0, mapWidth - 120); table.positionY = local.dy.clamp(0, mapHeight - 80); - - context - .read() - .add(ChangePositionTableEvent - .changePositionTable( - tableId: table.id ?? "", - position: details.offset, - )); }); + context + .read() + .add(ChangePositionTableEvent + .changePositionTable( + tableId: table.id ?? "", + position: Offset( + table.positionX ?? 0.0, + table.positionY ?? 0.0, + ), + )); }, child: GestureDetector( onTap: () => selectTable(table),