mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-17 02:25:31 +00:00
link space model api integration
This commit is contained in:
@ -1,36 +1,26 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
|
||||
import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_event.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/link_space_model/bloc/link_space_model_state.dart';
|
||||
import 'package:syncrow_web/services/space_model_mang_api.dart';
|
||||
import 'package:syncrow_web/utils/navigation_service.dart';
|
||||
|
||||
class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
|
||||
SpaceModelBloc() : super(SpaceModelInitial()) {
|
||||
on<SpaceModelSelectedIdsEvent>(_getSpaceIds);
|
||||
on<LinkSpaceModelEvent>(_handleLinkSpaceModel);
|
||||
on<ValidateSpaceModelEvent>(_validateLinkSpaceModel);
|
||||
on<SpaceModelSelectedEvent>((event, emit) {
|
||||
emit(SpaceModelSelectedState(event.selectedIndex));
|
||||
});
|
||||
}
|
||||
|
||||
// Future<void> getSpaceIds(
|
||||
// SpaceModelSelectedIdsEvent event, Emitter<SpaceModelState> emit) async {
|
||||
// try {
|
||||
// BuildContext context = NavigationService.navigatorKey.currentContext!;
|
||||
// var spaceBloc = context.read<SpaceTreeBloc>();
|
||||
// for (var communityId in spaceBloc.state.selectedCommunities) {
|
||||
// List<String> spacesList =
|
||||
// spaceBloc.state.selectedCommunityAndSpaces[communityId] ?? [];
|
||||
// for (var spaceId in spacesList) {
|
||||
// print('spaceId===$spaceId');
|
||||
// }
|
||||
// }
|
||||
// } catch (e) {
|
||||
// print('Error fetching space IDs: $e');
|
||||
// }
|
||||
// }
|
||||
|
||||
List<String> spacesListIds = [];
|
||||
bool hasSelectedSpaces = false;
|
||||
String validate = '';
|
||||
|
||||
Future<void> _getSpaceIds(
|
||||
SpaceModelSelectedIdsEvent event, Emitter<SpaceModelState> emit) async {
|
||||
@ -40,22 +30,17 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
|
||||
for (var communityId in spaceBloc.state.selectedCommunities) {
|
||||
List<String> spacesList =
|
||||
spaceBloc.state.selectedCommunityAndSpaces[communityId] ?? [];
|
||||
spacesListIds = spacesList;
|
||||
for (var spaceId in spacesList) {
|
||||
print('spaceId===$spaceId');
|
||||
}
|
||||
}
|
||||
// Check if any community has selected spaces
|
||||
hasSelectedSpaces =
|
||||
spaceBloc.state.selectedCommunities.any((communityId) {
|
||||
List<String> spacesList =
|
||||
spaceBloc.state.selectedCommunityAndSpaces[communityId] ?? [];
|
||||
return spacesList.isNotEmpty;
|
||||
});
|
||||
|
||||
// Optionally, you could emit a state here if you want to rebuild the UI
|
||||
// emit(SpaceModelSelectionUpdatedState(hasSelectedSpaces));
|
||||
|
||||
// Debug output
|
||||
if (hasSelectedSpaces) {
|
||||
print("At least one space is selected.");
|
||||
} else {
|
||||
@ -65,4 +50,57 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
|
||||
print("Error in _getSpaceIds: $e");
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _handleLinkSpaceModel(
|
||||
LinkSpaceModelEvent event,
|
||||
Emitter<SpaceModelState> emit,
|
||||
) async {
|
||||
emit(SpaceModelLoading());
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
await SpaceModelManagementApi().linkSpaceModel(
|
||||
spaceModelUuid: event.selectedSpaceMode!,
|
||||
projectId: projectUuid,
|
||||
spaceUuids: spacesListIds,
|
||||
isOverWrite: event.isOverWrite);
|
||||
emit(SpaceModelLinkSuccess());
|
||||
} on DioException catch (e) {
|
||||
final errorMessage = _parseDioError(e);
|
||||
emit(SpaceModelOperationFailure(errorMessage));
|
||||
} catch (e) {
|
||||
emit(SpaceModelOperationFailure('Unexpected error: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _validateLinkSpaceModel(
|
||||
ValidateSpaceModelEvent event,
|
||||
Emitter<SpaceModelState> emit,
|
||||
) async {
|
||||
emit(SpaceModelLoading());
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
await SpaceModelManagementApi().validateSpaceModel(
|
||||
projectUuid,
|
||||
spacesListIds,
|
||||
);
|
||||
emit(SpaceValidationSuccess());
|
||||
} on DioException catch (e) {
|
||||
final errorMessage = _parseDioError(e);
|
||||
if (errorMessage ==
|
||||
'Selected spaces already have linked space model / sub-spaces and devices') {
|
||||
emit(const AlreadyHaveLinkedState());
|
||||
} else {
|
||||
emit(SpaceModelOperationFailure(errorMessage));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(SpaceModelOperationFailure('Unexpected error: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
String _parseDioError(DioException e) {
|
||||
if (e.response?.data is Map<String, dynamic>) {
|
||||
return e.response!.data['error']['message'] ?? 'Unknown error occurred';
|
||||
}
|
||||
return e.message ?? 'Network request failed';
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
abstract class SpaceModelEvent {}
|
||||
|
||||
class SpaceModelSelectedEvent extends SpaceModelEvent {
|
||||
@ -6,8 +8,15 @@ class SpaceModelSelectedEvent extends SpaceModelEvent {
|
||||
SpaceModelSelectedEvent(this.selectedIndex);
|
||||
}
|
||||
|
||||
class SpaceModelSelectedIdsEvent extends SpaceModelEvent {}
|
||||
|
||||
|
||||
class SpaceModelSelectedIdsEvent extends SpaceModelEvent {
|
||||
|
||||
class LinkSpaceModelEvent extends SpaceModelEvent {
|
||||
final String? selectedSpaceMode;
|
||||
final bool isOverWrite;
|
||||
LinkSpaceModelEvent({this.selectedSpaceMode, this.isOverWrite = false});
|
||||
}
|
||||
|
||||
class ValidateSpaceModelEvent extends SpaceModelEvent {
|
||||
BuildContext? context;
|
||||
ValidateSpaceModelEvent({this.context});
|
||||
}
|
||||
|
@ -1,9 +1,35 @@
|
||||
abstract class SpaceModelState {}
|
||||
abstract class SpaceModelState {
|
||||
const SpaceModelState();
|
||||
}
|
||||
|
||||
class SpaceModelInitial extends SpaceModelState {}
|
||||
|
||||
class SpaceModelLoading extends SpaceModelState {}
|
||||
|
||||
class SpaceModelSelectedState extends SpaceModelState {
|
||||
final int selectedIndex;
|
||||
|
||||
SpaceModelSelectedState(this.selectedIndex);
|
||||
const SpaceModelSelectedState(this.selectedIndex);
|
||||
}
|
||||
|
||||
class SpaceModelSelectionUpdated extends SpaceModelState {
|
||||
final bool hasSelectedSpaces;
|
||||
const SpaceModelSelectionUpdated(this.hasSelectedSpaces);
|
||||
}
|
||||
|
||||
class SpaceValidationSuccess extends SpaceModelState {}
|
||||
|
||||
class SpaceModelLinkSuccess extends SpaceModelState {}
|
||||
|
||||
class ValidationError extends SpaceModelState {
|
||||
final String message;
|
||||
const ValidationError(this.message);
|
||||
}
|
||||
|
||||
class SpaceModelOperationFailure extends SpaceModelState {
|
||||
final String message;
|
||||
const SpaceModelOperationFailure(this.message);
|
||||
}
|
||||
|
||||
class AlreadyHaveLinkedState extends SpaceModelState {
|
||||
const AlreadyHaveLinkedState();
|
||||
}
|
||||
|
Reference in New Issue
Block a user