From 6302ea0282abd3c30f21cd81e60ae42054be6d2f Mon Sep 17 00:00:00 2001 From: efrilm Date: Mon, 4 Aug 2025 00:09:51 +0700 Subject: [PATCH] feat: update position table --- .../datasources/table_remote_datasource.dart | 37 ++++ lib/main.dart | 2 +- .../change_position_table_bloc.dart | 16 +- .../change_position_table_bloc.freezed.dart | 207 ++++++++++++++++-- .../change_position_table_event.dart | 2 +- .../change_position_table_state.dart | 1 + .../pages/new_table_management_page.dart | 12 +- 7 files changed, 251 insertions(+), 26 deletions(-) diff --git a/lib/data/datasources/table_remote_datasource.dart b/lib/data/datasources/table_remote_datasource.dart index ef8c905..7ad6f5c 100644 --- a/lib/data/datasources/table_remote_datasource.dart +++ b/lib/data/datasources/table_remote_datasource.dart @@ -1,4 +1,5 @@ import 'dart:developer'; +import 'dart:ui'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:enaklo_pos/core/network/dio_client.dart'; @@ -88,4 +89,40 @@ class TableRemoteDataSource { return const Left('Unexpected error occurred'); } } + + Future> updatePosition({ + required String tableId, + required Offset position, + }) async { + try { + final authData = await AuthLocalDataSource().getAuthData(); + final url = '${Variables.baseUrl}/api/v1/tables/$tableId'; + + final response = await dio.put( + url, + data: { + "position_x": position.dx.round(), + "position_y": position.dy.round(), + }, + 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/main.dart b/lib/main.dart index a5707c7..ea2b8a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -151,7 +151,7 @@ class _MyAppState extends State { create: (context) => CreateTableBloc(TableRemoteDataSource()), ), BlocProvider( - create: (context) => ChangePositionTableBloc(), + create: (context) => ChangePositionTableBloc(TableRemoteDataSource()), ), BlocProvider( create: (context) => GetTableBloc(TableRemoteDataSource()), diff --git a/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.dart b/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.dart index fdb1b3f..2b4f58d 100644 --- a/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.dart +++ b/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.dart @@ -1,7 +1,7 @@ import 'dart:ui'; import 'package:bloc/bloc.dart'; -import 'package:enaklo_pos/data/datasources/product_local_datasource.dart'; +import 'package:enaklo_pos/data/datasources/table_remote_datasource.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; part 'change_position_table_event.dart'; @@ -10,11 +10,19 @@ part 'change_position_table_bloc.freezed.dart'; class ChangePositionTableBloc extends Bloc { - ChangePositionTableBloc() : super(_Initial()) { + final TableRemoteDataSource _tableRemoteDataSource; + ChangePositionTableBloc(this._tableRemoteDataSource) + : super(ChangePositionTableState.initial()) { on<_ChangePositionTable>((event, emit) async { emit(_Loading()); - await ProductLocalDatasource.instance - .changePositionTable(event.tableId, event.position); + final result = await _tableRemoteDataSource.updatePosition( + tableId: event.tableId, + position: event.position, + ); + result.fold( + (l) => emit(_Error(l)), + (r) => emit(_Success('Generate Success')), + ); emit(_Success('Generate Success')); }); } diff --git a/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.freezed.dart b/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.freezed.dart index 9e0cb6d..8799bc5 100644 --- a/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.freezed.dart +++ b/lib/presentation/table/blocs/change_position_table/change_position_table_bloc.freezed.dart @@ -19,19 +19,20 @@ mixin _$ChangePositionTableEvent { @optionalTypeArgs TResult when({ required TResult Function() started, - required TResult Function(int tableId, Offset position) changePositionTable, + required TResult Function(String tableId, Offset position) + changePositionTable, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? started, - TResult? Function(int tableId, Offset position)? changePositionTable, + TResult? Function(String tableId, Offset position)? changePositionTable, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ TResult Function()? started, - TResult Function(int tableId, Offset position)? changePositionTable, + TResult Function(String tableId, Offset position)? changePositionTable, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -120,7 +121,8 @@ class _$StartedImpl implements _Started { @optionalTypeArgs TResult when({ required TResult Function() started, - required TResult Function(int tableId, Offset position) changePositionTable, + required TResult Function(String tableId, Offset position) + changePositionTable, }) { return started(); } @@ -129,7 +131,7 @@ class _$StartedImpl implements _Started { @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? started, - TResult? Function(int tableId, Offset position)? changePositionTable, + TResult? Function(String tableId, Offset position)? changePositionTable, }) { return started?.call(); } @@ -138,7 +140,7 @@ class _$StartedImpl implements _Started { @optionalTypeArgs TResult maybeWhen({ TResult Function()? started, - TResult Function(int tableId, Offset position)? changePositionTable, + TResult Function(String tableId, Offset position)? changePositionTable, required TResult orElse(), }) { if (started != null) { @@ -189,7 +191,7 @@ abstract class _$$ChangePositionTableImplCopyWith<$Res> { $Res Function(_$ChangePositionTableImpl) then) = __$$ChangePositionTableImplCopyWithImpl<$Res>; @useResult - $Res call({int tableId, Offset position}); + $Res call({String tableId, Offset position}); } /// @nodoc @@ -213,7 +215,7 @@ class __$$ChangePositionTableImplCopyWithImpl<$Res> tableId: null == tableId ? _value.tableId : tableId // ignore: cast_nullable_to_non_nullable - as int, + as String, position: null == position ? _value.position : position // ignore: cast_nullable_to_non_nullable @@ -229,7 +231,7 @@ class _$ChangePositionTableImpl implements _ChangePositionTable { {required this.tableId, required this.position}); @override - final int tableId; + final String tableId; @override final Offset position; @@ -264,7 +266,8 @@ class _$ChangePositionTableImpl implements _ChangePositionTable { @optionalTypeArgs TResult when({ required TResult Function() started, - required TResult Function(int tableId, Offset position) changePositionTable, + required TResult Function(String tableId, Offset position) + changePositionTable, }) { return changePositionTable(tableId, position); } @@ -273,7 +276,7 @@ class _$ChangePositionTableImpl implements _ChangePositionTable { @optionalTypeArgs TResult? whenOrNull({ TResult? Function()? started, - TResult? Function(int tableId, Offset position)? changePositionTable, + TResult? Function(String tableId, Offset position)? changePositionTable, }) { return changePositionTable?.call(tableId, position); } @@ -282,7 +285,7 @@ class _$ChangePositionTableImpl implements _ChangePositionTable { @optionalTypeArgs TResult maybeWhen({ TResult Function()? started, - TResult Function(int tableId, Offset position)? changePositionTable, + TResult Function(String tableId, Offset position)? changePositionTable, required TResult orElse(), }) { if (changePositionTable != null) { @@ -325,10 +328,10 @@ class _$ChangePositionTableImpl implements _ChangePositionTable { abstract class _ChangePositionTable implements ChangePositionTableEvent { const factory _ChangePositionTable( - {required final int tableId, + {required final String tableId, required final Offset position}) = _$ChangePositionTableImpl; - int get tableId; + String get tableId; Offset get position; /// Create a copy of ChangePositionTableEvent @@ -345,6 +348,7 @@ mixin _$ChangePositionTableState { required TResult Function() initial, required TResult Function() loading, required TResult Function(String message) success, + required TResult Function(String message) error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -352,6 +356,7 @@ mixin _$ChangePositionTableState { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(String message)? success, + TResult? Function(String message)? error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -359,6 +364,7 @@ mixin _$ChangePositionTableState { TResult Function()? initial, TResult Function()? loading, TResult Function(String message)? success, + TResult Function(String message)? error, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -367,6 +373,7 @@ mixin _$ChangePositionTableState { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -374,6 +381,7 @@ mixin _$ChangePositionTableState { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) => throw _privateConstructorUsedError; @optionalTypeArgs @@ -381,6 +389,7 @@ mixin _$ChangePositionTableState { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) => throw _privateConstructorUsedError; @@ -452,6 +461,7 @@ class _$InitialImpl implements _Initial { required TResult Function() initial, required TResult Function() loading, required TResult Function(String message) success, + required TResult Function(String message) error, }) { return initial(); } @@ -462,6 +472,7 @@ class _$InitialImpl implements _Initial { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(String message)? success, + TResult? Function(String message)? error, }) { return initial?.call(); } @@ -472,6 +483,7 @@ class _$InitialImpl implements _Initial { TResult Function()? initial, TResult Function()? loading, TResult Function(String message)? success, + TResult Function(String message)? error, required TResult orElse(), }) { if (initial != null) { @@ -486,6 +498,7 @@ class _$InitialImpl implements _Initial { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) { return initial(this); } @@ -496,6 +509,7 @@ class _$InitialImpl implements _Initial { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) { return initial?.call(this); } @@ -506,6 +520,7 @@ class _$InitialImpl implements _Initial { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) { if (initial != null) { @@ -563,6 +578,7 @@ class _$LoadingImpl implements _Loading { required TResult Function() initial, required TResult Function() loading, required TResult Function(String message) success, + required TResult Function(String message) error, }) { return loading(); } @@ -573,6 +589,7 @@ class _$LoadingImpl implements _Loading { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(String message)? success, + TResult? Function(String message)? error, }) { return loading?.call(); } @@ -583,6 +600,7 @@ class _$LoadingImpl implements _Loading { TResult Function()? initial, TResult Function()? loading, TResult Function(String message)? success, + TResult Function(String message)? error, required TResult orElse(), }) { if (loading != null) { @@ -597,6 +615,7 @@ class _$LoadingImpl implements _Loading { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) { return loading(this); } @@ -607,6 +626,7 @@ class _$LoadingImpl implements _Loading { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) { return loading?.call(this); } @@ -617,6 +637,7 @@ class _$LoadingImpl implements _Loading { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) { if (loading != null) { @@ -701,6 +722,7 @@ class _$SuccessImpl implements _Success { required TResult Function() initial, required TResult Function() loading, required TResult Function(String message) success, + required TResult Function(String message) error, }) { return success(message); } @@ -711,6 +733,7 @@ class _$SuccessImpl implements _Success { TResult? Function()? initial, TResult? Function()? loading, TResult? Function(String message)? success, + TResult? Function(String message)? error, }) { return success?.call(message); } @@ -721,6 +744,7 @@ class _$SuccessImpl implements _Success { TResult Function()? initial, TResult Function()? loading, TResult Function(String message)? success, + TResult Function(String message)? error, required TResult orElse(), }) { if (success != null) { @@ -735,6 +759,7 @@ class _$SuccessImpl implements _Success { required TResult Function(_Initial value) initial, required TResult Function(_Loading value) loading, required TResult Function(_Success value) success, + required TResult Function(_Error value) error, }) { return success(this); } @@ -745,6 +770,7 @@ class _$SuccessImpl implements _Success { TResult? Function(_Initial value)? initial, TResult? Function(_Loading value)? loading, TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, }) { return success?.call(this); } @@ -755,6 +781,7 @@ class _$SuccessImpl implements _Success { TResult Function(_Initial value)? initial, TResult Function(_Loading value)? loading, TResult Function(_Success value)? success, + TResult Function(_Error value)? error, required TResult orElse(), }) { if (success != null) { @@ -775,3 +802,155 @@ abstract class _Success implements ChangePositionTableState { _$$SuccessImplCopyWith<_$SuccessImpl> get copyWith => throw _privateConstructorUsedError; } + +/// @nodoc +abstract class _$$ErrorImplCopyWith<$Res> { + factory _$$ErrorImplCopyWith( + _$ErrorImpl value, $Res Function(_$ErrorImpl) then) = + __$$ErrorImplCopyWithImpl<$Res>; + @useResult + $Res call({String message}); +} + +/// @nodoc +class __$$ErrorImplCopyWithImpl<$Res> + extends _$ChangePositionTableStateCopyWithImpl<$Res, _$ErrorImpl> + implements _$$ErrorImplCopyWith<$Res> { + __$$ErrorImplCopyWithImpl( + _$ErrorImpl _value, $Res Function(_$ErrorImpl) _then) + : super(_value, _then); + + /// Create a copy of ChangePositionTableState + /// with the given fields replaced by the non-null parameter values. + @pragma('vm:prefer-inline') + @override + $Res call({ + Object? message = null, + }) { + return _then(_$ErrorImpl( + null == message + ? _value.message + : message // ignore: cast_nullable_to_non_nullable + as String, + )); + } +} + +/// @nodoc + +class _$ErrorImpl implements _Error { + const _$ErrorImpl(this.message); + + @override + final String message; + + @override + String toString() { + return 'ChangePositionTableState.error(message: $message)'; + } + + @override + bool operator ==(Object other) { + return identical(this, other) || + (other.runtimeType == runtimeType && + other is _$ErrorImpl && + (identical(other.message, message) || other.message == message)); + } + + @override + int get hashCode => Object.hash(runtimeType, message); + + /// Create a copy of ChangePositionTableState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + @override + @pragma('vm:prefer-inline') + _$$ErrorImplCopyWith<_$ErrorImpl> get copyWith => + __$$ErrorImplCopyWithImpl<_$ErrorImpl>(this, _$identity); + + @override + @optionalTypeArgs + TResult when({ + required TResult Function() initial, + required TResult Function() loading, + required TResult Function(String message) success, + required TResult Function(String message) error, + }) { + return error(message); + } + + @override + @optionalTypeArgs + TResult? whenOrNull({ + TResult? Function()? initial, + TResult? Function()? loading, + TResult? Function(String message)? success, + TResult? Function(String message)? error, + }) { + return error?.call(message); + } + + @override + @optionalTypeArgs + TResult maybeWhen({ + TResult Function()? initial, + TResult Function()? loading, + TResult Function(String message)? success, + TResult Function(String message)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(message); + } + return orElse(); + } + + @override + @optionalTypeArgs + TResult map({ + required TResult Function(_Initial value) initial, + required TResult Function(_Loading value) loading, + required TResult Function(_Success value) success, + required TResult Function(_Error value) error, + }) { + return error(this); + } + + @override + @optionalTypeArgs + TResult? mapOrNull({ + TResult? Function(_Initial value)? initial, + TResult? Function(_Loading value)? loading, + TResult? Function(_Success value)? success, + TResult? Function(_Error value)? error, + }) { + return error?.call(this); + } + + @override + @optionalTypeArgs + TResult maybeMap({ + TResult Function(_Initial value)? initial, + TResult Function(_Loading value)? loading, + TResult Function(_Success value)? success, + TResult Function(_Error value)? error, + required TResult orElse(), + }) { + if (error != null) { + return error(this); + } + return orElse(); + } +} + +abstract class _Error implements ChangePositionTableState { + const factory _Error(final String message) = _$ErrorImpl; + + String get message; + + /// Create a copy of ChangePositionTableState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) + _$$ErrorImplCopyWith<_$ErrorImpl> get copyWith => + throw _privateConstructorUsedError; +} diff --git a/lib/presentation/table/blocs/change_position_table/change_position_table_event.dart b/lib/presentation/table/blocs/change_position_table/change_position_table_event.dart index 3b58a34..431cdcd 100644 --- a/lib/presentation/table/blocs/change_position_table/change_position_table_event.dart +++ b/lib/presentation/table/blocs/change_position_table/change_position_table_event.dart @@ -4,7 +4,7 @@ part of 'change_position_table_bloc.dart'; class ChangePositionTableEvent with _$ChangePositionTableEvent { const factory ChangePositionTableEvent.started() = _Started; const factory ChangePositionTableEvent.changePositionTable({ - required int tableId, + required String tableId, required Offset position, }) = _ChangePositionTable; } diff --git a/lib/presentation/table/blocs/change_position_table/change_position_table_state.dart b/lib/presentation/table/blocs/change_position_table/change_position_table_state.dart index 5fb037b..0cd917d 100644 --- a/lib/presentation/table/blocs/change_position_table/change_position_table_state.dart +++ b/lib/presentation/table/blocs/change_position_table/change_position_table_state.dart @@ -7,4 +7,5 @@ class ChangePositionTableState with _$ChangePositionTableState { const factory ChangePositionTableState.loading() = _Loading; const factory ChangePositionTableState.success(String message) = _Success; + const factory ChangePositionTableState.error(String message) = _Error; } diff --git a/lib/presentation/table/pages/new_table_management_page.dart b/lib/presentation/table/pages/new_table_management_page.dart index 044aeca..fd55a8c 100644 --- a/lib/presentation/table/pages/new_table_management_page.dart +++ b/lib/presentation/table/pages/new_table_management_page.dart @@ -110,12 +110,12 @@ class _TableManagementScreenState extends State { feedback: TableWidget(table: table), childWhenDragging: SizedBox.shrink(), onDragEnd: (details) { - // context - // .read() - // .add(ChangePositionTableEvent.changePositionTable( - // tableId: table.id, - // position: details.offset, - // )); + context + .read() + .add(ChangePositionTableEvent.changePositionTable( + tableId: table.id ?? "", + position: details.offset, + )); }, child: TableWidget(table: table), ),