mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-08-25 14:29:41 +00:00
make sendApi bloc and service
This commit is contained in:
@ -58,28 +58,4 @@ class RemoteNonBookableSpaces implements NonBookableSpacesService {
|
|||||||
|
|
||||||
return completer.future;
|
return completer.future;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> sendBookableSpacesToApi(
|
|
||||||
SendBookableSpacesToApiParams params) async {
|
|
||||||
try {
|
|
||||||
await _httpService.post(
|
|
||||||
path: ApiEndpoints.bookableSpaces,
|
|
||||||
body: params.toJson(),
|
|
||||||
expectedResponseModel: (p0) {},
|
|
||||||
);
|
|
||||||
} on DioException catch (e) {
|
|
||||||
final message = e.response?.data as Map<String, dynamic>?;
|
|
||||||
final error = message?['error'] as Map<String, dynamic>?;
|
|
||||||
final errorMessage = error?['error'] as String? ?? '';
|
|
||||||
final formattedErrorMessage = [
|
|
||||||
_defaultErrorMessage,
|
|
||||||
errorMessage,
|
|
||||||
].join(': ');
|
|
||||||
throw APIException(formattedErrorMessage);
|
|
||||||
} catch (e) {
|
|
||||||
final formattedErrorMessage = [_defaultErrorMessage, '$e'].join(': ');
|
|
||||||
throw APIException(formattedErrorMessage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/send_bookable_spaces_to_api_params.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_service.dart';
|
||||||
|
import 'package:syncrow_web/services/api/api_exception.dart';
|
||||||
|
import 'package:syncrow_web/services/api/http_service.dart';
|
||||||
|
import 'package:syncrow_web/utils/constants/api_const.dart';
|
||||||
|
|
||||||
|
class RemoteSendBookableSpaces implements SendBookableSpacesService {
|
||||||
|
final HTTPService _httpService;
|
||||||
|
RemoteSendBookableSpaces(this._httpService);
|
||||||
|
static const _defaultErrorMessage = 'Failed to load Spaces';
|
||||||
|
@override
|
||||||
|
Future<void> sendBookableSpacesToApi(
|
||||||
|
SendBookableSpacesToApiParams params) async {
|
||||||
|
try {
|
||||||
|
await _httpService.post(
|
||||||
|
path: ApiEndpoints.bookableSpaces,
|
||||||
|
body: params.toJson(),
|
||||||
|
expectedResponseModel: (p0) {},
|
||||||
|
);
|
||||||
|
} on DioException catch (e) {
|
||||||
|
final message = e.response?.data as Map<String, dynamic>?;
|
||||||
|
final error = message?['error'] as Map<String, dynamic>?;
|
||||||
|
final errorMessage = error?['error'] as String? ?? '';
|
||||||
|
final formattedErrorMessage = [
|
||||||
|
_defaultErrorMessage,
|
||||||
|
errorMessage,
|
||||||
|
].join(': ');
|
||||||
|
throw APIException(formattedErrorMessage);
|
||||||
|
} catch (e) {
|
||||||
|
final formattedErrorMessage = [_defaultErrorMessage, '$e'].join(': ');
|
||||||
|
throw APIException(formattedErrorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,8 @@
|
|||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/send_bookable_spaces_to_api_params.dart';
|
|
||||||
import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart';
|
import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart';
|
||||||
|
|
||||||
abstract class NonBookableSpacesService {
|
abstract class NonBookableSpacesService {
|
||||||
Future<PaginatedDataModel<BookableSpacemodel>> load(
|
Future<PaginatedDataModel<BookableSpacemodel>> load(
|
||||||
NonBookableSpacesParams params);
|
NonBookableSpacesParams params);
|
||||||
Future<void> sendBookableSpacesToApi(SendBookableSpacesToApiParams params);
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/send_bookable_spaces_to_api_params.dart';
|
||||||
|
|
||||||
|
abstract class SendBookableSpacesService{
|
||||||
|
Future<void> sendBookableSpacesToApi(SendBookableSpacesToApiParams params);
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/send_bookable_spaces_to_api_params.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/send_bookable_spaces_service.dart';
|
||||||
|
|
||||||
|
part 'send_bookable_spaces_event.dart';
|
||||||
|
part 'send_bookable_spaces_state.dart';
|
||||||
|
|
||||||
|
class SendBookableSpacesBloc
|
||||||
|
extends Bloc<SendBookableSpacesEvent, SendBookableSpacesState> {
|
||||||
|
SendBookableSpacesService sendBookableSpacesService;
|
||||||
|
SendBookableSpacesBloc(
|
||||||
|
this.sendBookableSpacesService,
|
||||||
|
) : super(SendBookableSpacesInitial()) {
|
||||||
|
on<SendBookableSpacesToApi>(_onSendBookableSpacesToApi);
|
||||||
|
}
|
||||||
|
Future<void> _onSendBookableSpacesToApi(SendBookableSpacesToApi event,
|
||||||
|
Emitter<SendBookableSpacesState> emit) async {
|
||||||
|
emit(SendBookableSpacesLoading());
|
||||||
|
try {
|
||||||
|
await sendBookableSpacesService.sendBookableSpacesToApi(
|
||||||
|
SendBookableSpacesToApiParams.fromBookableSpacesModel(
|
||||||
|
event.selectedBookableSpaces),
|
||||||
|
);
|
||||||
|
emit(SendBookableSpacesSuccess());
|
||||||
|
} catch (e) {
|
||||||
|
emit(
|
||||||
|
SendBookableSpacesError(e.toString()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
part of 'send_bookable_spaces_bloc.dart';
|
||||||
|
|
||||||
|
sealed class SendBookableSpacesEvent extends Equatable {
|
||||||
|
const SendBookableSpacesEvent();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
class SendBookableSpacesToApi extends SendBookableSpacesEvent {
|
||||||
|
final List<BookableSpacemodel> selectedBookableSpaces;
|
||||||
|
const SendBookableSpacesToApi({required this.selectedBookableSpaces});
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
part of 'send_bookable_spaces_bloc.dart';
|
||||||
|
|
||||||
|
sealed class SendBookableSpacesState extends Equatable {
|
||||||
|
const SendBookableSpacesState();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
final class SendBookableSpacesInitial extends SendBookableSpacesState {}
|
||||||
|
|
||||||
|
class SendBookableSpacesLoading extends SendBookableSpacesState {}
|
||||||
|
|
||||||
|
class SendBookableSpacesSuccess extends SendBookableSpacesState {}
|
||||||
|
|
||||||
|
class SendBookableSpacesError extends SendBookableSpacesState {
|
||||||
|
final String error;
|
||||||
|
const SendBookableSpacesError(this.error);
|
||||||
|
}
|
@ -2,7 +2,6 @@ import 'package:bloc/bloc.dart';
|
|||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/send_bookable_spaces_to_api_params.dart';
|
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart';
|
||||||
|
|
||||||
part 'setup_bookable_spaces_event.dart';
|
part 'setup_bookable_spaces_event.dart';
|
||||||
@ -16,7 +15,7 @@ class SetupBookableSpacesBloc
|
|||||||
: super(SetupBookableSpacesInitial()) {
|
: super(SetupBookableSpacesInitial()) {
|
||||||
on<AddToBookableSpaceEvent>(_onAddToBookableSpaceEvent);
|
on<AddToBookableSpaceEvent>(_onAddToBookableSpaceEvent);
|
||||||
on<RemoveFromBookableSpaceEvent>(_onRemoveFromBookableSpaceEvent);
|
on<RemoveFromBookableSpaceEvent>(_onRemoveFromBookableSpaceEvent);
|
||||||
on<SendBookableSpacesToApi>(_onSendBookableSpacesToApi);
|
|
||||||
on<CheckConfigurValidityEvent>(_onCheckConfigurValidityEvent);
|
on<CheckConfigurValidityEvent>(_onCheckConfigurValidityEvent);
|
||||||
on<EditModeSelected>(_onEditModeSelected);
|
on<EditModeSelected>(_onEditModeSelected);
|
||||||
}
|
}
|
||||||
@ -44,23 +43,6 @@ class SetupBookableSpacesBloc
|
|||||||
bookableSpaces: selectedBookableSpaces));
|
bookableSpaces: selectedBookableSpaces));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _onSendBookableSpacesToApi(SendBookableSpacesToApi event,
|
|
||||||
Emitter<SetupBookableSpacesState> emit) async {
|
|
||||||
emit(SendBookableSpacesLoading());
|
|
||||||
try {
|
|
||||||
await nonBookableSpacesService.sendBookableSpacesToApi(
|
|
||||||
SendBookableSpacesToApiParams.fromBookableSpacesModel(
|
|
||||||
selectedBookableSpaces,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
emit(SendBookableSpacesSuccess());
|
|
||||||
} catch (e) {
|
|
||||||
emit(
|
|
||||||
SendBookableSpacesError(e.toString()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _onCheckConfigurValidityEvent(CheckConfigurValidityEvent event,
|
void _onCheckConfigurValidityEvent(CheckConfigurValidityEvent event,
|
||||||
Emitter<SetupBookableSpacesState> emit) {
|
Emitter<SetupBookableSpacesState> emit) {
|
||||||
if (selectedBookableSpaces.first.spaceConfig!.isValid) {
|
if (selectedBookableSpaces.first.spaceConfig!.isValid) {
|
||||||
|
@ -6,6 +6,7 @@ sealed class SetupBookableSpacesEvent extends Equatable {
|
|||||||
@override
|
@override
|
||||||
List<Object> get props => [];
|
List<Object> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
class AddToBookableSpaceEvent extends SetupBookableSpacesEvent {
|
class AddToBookableSpaceEvent extends SetupBookableSpacesEvent {
|
||||||
final BookableSpacemodel nonBookableSpace;
|
final BookableSpacemodel nonBookableSpace;
|
||||||
const AddToBookableSpaceEvent({
|
const AddToBookableSpaceEvent({
|
||||||
@ -20,8 +21,6 @@ class RemoveFromBookableSpaceEvent extends SetupBookableSpacesEvent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class SendBookableSpacesToApi extends SetupBookableSpacesEvent {}
|
|
||||||
|
|
||||||
class CheckConfigurValidityEvent extends SetupBookableSpacesEvent {}
|
class CheckConfigurValidityEvent extends SetupBookableSpacesEvent {}
|
||||||
|
|
||||||
class EditModeSelected extends SetupBookableSpacesEvent {
|
class EditModeSelected extends SetupBookableSpacesEvent {
|
||||||
|
@ -29,11 +29,4 @@ class ValidSaveButtonState extends SetupBookableSpacesState {}
|
|||||||
|
|
||||||
class UnValidSaveButtonState extends SetupBookableSpacesState {}
|
class UnValidSaveButtonState extends SetupBookableSpacesState {}
|
||||||
|
|
||||||
class SendBookableSpacesLoading extends SetupBookableSpacesState {}
|
|
||||||
|
|
||||||
class SendBookableSpacesSuccess extends SetupBookableSpacesState {}
|
|
||||||
|
|
||||||
class SendBookableSpacesError extends SetupBookableSpacesState {
|
|
||||||
final String error;
|
|
||||||
const SendBookableSpacesError(this.error);
|
|
||||||
}
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/data/remote_non_bookable_spaces.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/data/remote_non_bookable_spaces.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/data/remote_send_bookable_spaces.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/send_bookable_spaces_bloc/send_bookable_spaces_bloc.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/setup_bookable_spaces_bloc/setup_bookable_spaces_bloc.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/setup_bookable_spaces_bloc/setup_bookable_spaces_bloc.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/steps_cubit/cubit/steps_cubit.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/steps_cubit/cubit/steps_cubit.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/details_steps_widget.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/details_steps_widget.dart';
|
||||||
@ -61,6 +63,11 @@ class _SetupBookableSpacesDialogState extends State<SetupBookableSpacesDialog> {
|
|||||||
..add(EditModeSelected(
|
..add(EditModeSelected(
|
||||||
editingBookableSpace: widget.editingBookableSpace!,
|
editingBookableSpace: widget.editingBookableSpace!,
|
||||||
)),
|
)),
|
||||||
|
),
|
||||||
|
BlocProvider(
|
||||||
|
create: (context) => SendBookableSpacesBloc(
|
||||||
|
RemoteSendBookableSpaces(HTTPService()),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
child: AlertDialog(
|
child: AlertDialog(
|
||||||
|
@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
|
|||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/update_bookable_space_param.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/update_bookable_space_param.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart';
|
||||||
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/send_bookable_spaces_bloc/send_bookable_spaces_bloc.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/setup_bookable_spaces_bloc/setup_bookable_spaces_bloc.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/setup_bookable_spaces_bloc/setup_bookable_spaces_bloc.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/update_bookable_spaces/update_bookable_spaces_bloc.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/update_bookable_spaces/update_bookable_spaces_bloc.dart';
|
||||||
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/buttons_divider_bottom_dialog_widget.dart';
|
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/buttons_divider_bottom_dialog_widget.dart';
|
||||||
@ -22,7 +23,7 @@ class SaveSecondStepButton extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocConsumer<SetupBookableSpacesBloc, SetupBookableSpacesState>(
|
return BlocConsumer<SendBookableSpacesBloc, SendBookableSpacesState>(
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
if (state is SendBookableSpacesSuccess) {
|
if (state is SendBookableSpacesSuccess) {
|
||||||
context.read<NonBookableSpacesBloc>().add(CallInitStateEvent());
|
context.read<NonBookableSpacesBloc>().add(CallInitStateEvent());
|
||||||
@ -45,8 +46,11 @@ class SaveSecondStepButton extends StatelessWidget {
|
|||||||
)) {
|
)) {
|
||||||
isEditingMode
|
isEditingMode
|
||||||
? callEditLogic(context)
|
? callEditLogic(context)
|
||||||
: context.read<SetupBookableSpacesBloc>().add(
|
: context.read<SendBookableSpacesBloc>().add(
|
||||||
SendBookableSpacesToApi(),
|
SendBookableSpacesToApi(
|
||||||
|
selectedBookableSpaces: context
|
||||||
|
.read<SetupBookableSpacesBloc>()
|
||||||
|
.selectedBookableSpaces),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user