diff --git a/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_bloc.dart b/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_bloc.dart new file mode 100644 index 00000000..482bf399 --- /dev/null +++ b/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_bloc.dart @@ -0,0 +1,36 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/space_model.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/domain/params/duplicate_space_param.dart'; +import 'package:syncrow_web/pages/space_management_v2/modules/duplicate_space/domain/services/duplicate_space_service.dart'; +import 'package:syncrow_web/services/api/api_exception.dart'; + +part 'duplicate_space_event.dart'; +part 'duplicate_space_state.dart'; + +class DuplicateSpaceBloc extends Bloc { + DuplicateSpaceBloc( + this._duplicateSpaceService, + ) : super(const DuplicateSpaceInitial()) { + on(_onDuplicateSpaceEvent); + } + + final DuplicateSpaceService _duplicateSpaceService; + + Future _onDuplicateSpaceEvent( + DuplicateSpaceEvent event, + Emitter emit, + ) async { + try { + emit(const DuplicateSpaceLoading()); + final result = await _duplicateSpaceService.duplicateSpace(event.param); + emit(DuplicateSpaceSuccess(result)); + } on APIException catch (e) { + emit(DuplicateSpaceFailure(e.message)); + } catch (e) { + emit(DuplicateSpaceFailure(e.toString())); + } finally { + emit(const DuplicateSpaceInitial()); + } + } +} diff --git a/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_event.dart b/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_event.dart new file mode 100644 index 00000000..5a437831 --- /dev/null +++ b/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_event.dart @@ -0,0 +1,10 @@ +part of 'duplicate_space_bloc.dart'; + +final class DuplicateSpaceEvent extends Equatable { + const DuplicateSpaceEvent({required this.param}); + + final DuplicateSpaceParam param; + + @override + List get props => [param]; +} diff --git a/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_state.dart b/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_state.dart new file mode 100644 index 00000000..d27a5b38 --- /dev/null +++ b/lib/pages/space_management_v2/modules/duplicate_space/presentation/bloc/duplicate_space_state.dart @@ -0,0 +1,34 @@ +part of 'duplicate_space_bloc.dart'; + +sealed class DuplicateSpaceState extends Equatable { + const DuplicateSpaceState(); + + @override + List get props => []; +} + +final class DuplicateSpaceInitial extends DuplicateSpaceState { + const DuplicateSpaceInitial(); +} + +final class DuplicateSpaceLoading extends DuplicateSpaceState { + const DuplicateSpaceLoading(); +} + +final class DuplicateSpaceSuccess extends DuplicateSpaceState { + const DuplicateSpaceSuccess(this.space); + + final SpaceModel space; + + @override + List get props => [space]; +} + +final class DuplicateSpaceFailure extends DuplicateSpaceState { + const DuplicateSpaceFailure(this.errorMessage); + + final String errorMessage; + + @override + List get props => [errorMessage]; +}