mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-08-25 22:09:40 +00:00
Merge branch 'dev' of https://github.com/SyncrowIOT/web into bugfix/assign_togs_to_table_overflow
This commit is contained in:
@ -0,0 +1,58 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:syncrow_web/pages/common/bloc/project_manager.dart';
|
||||
import 'package:syncrow_web/pages/space_management_v2/modules/reorder_spaces/domain/params/reorder_spaces_param.dart';
|
||||
import 'package:syncrow_web/pages/space_management_v2/modules/reorder_spaces/domain/services/reorder_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';
|
||||
|
||||
final class RemoteReorderSpacesService implements ReorderSpacesService {
|
||||
RemoteReorderSpacesService(this._httpClient);
|
||||
|
||||
final HTTPService _httpClient;
|
||||
|
||||
@override
|
||||
Future<void> reorderSpaces(ReorderSpacesParam param) async {
|
||||
try {
|
||||
await _httpClient.post(
|
||||
path: await _makeUrl(param),
|
||||
body: param.toJson(),
|
||||
expectedResponseModel: (json) => json,
|
||||
);
|
||||
} on DioException catch (e) {
|
||||
final message = e.response?.data as Map<String, dynamic>?;
|
||||
throw APIException(_getErrorMessageFromBody(message));
|
||||
} catch (e) {
|
||||
throw APIException(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
String _getErrorMessageFromBody(Map<String, dynamic>? body) {
|
||||
if (body == null) return 'Failed to delete space';
|
||||
final error = body['error'] as Map<String, dynamic>?;
|
||||
final errorMessage = error?['message'] as String? ?? '';
|
||||
return errorMessage;
|
||||
}
|
||||
|
||||
Future<String> _makeUrl(ReorderSpacesParam param) async {
|
||||
final projectUuid = await ProjectManager.getProjectUUID();
|
||||
final communityUuid = param.communityUuid;
|
||||
|
||||
if (projectUuid == null || projectUuid.isEmpty) {
|
||||
throw APIException('Project UUID is not set');
|
||||
}
|
||||
|
||||
if (communityUuid.isEmpty) {
|
||||
throw APIException('Community UUID is not set');
|
||||
}
|
||||
|
||||
if (param.parentSpaceUuid.isEmpty) {
|
||||
throw APIException('Parent Space UUID is not set');
|
||||
}
|
||||
|
||||
return ApiEndpoints.reorderSpaces
|
||||
.replaceAll('{projectUuid}', projectUuid)
|
||||
.replaceAll('{communityUuid}', communityUuid)
|
||||
.replaceAll('{parentSpaceUuid}', param.parentSpaceUuid);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/models/space_model.dart';
|
||||
|
||||
class ReorderSpacesParam extends Equatable {
|
||||
const ReorderSpacesParam({
|
||||
required this.communityUuid,
|
||||
required this.parentSpaceUuid,
|
||||
required this.spaces,
|
||||
});
|
||||
|
||||
final String communityUuid;
|
||||
final String parentSpaceUuid;
|
||||
final List<SpaceModel> spaces;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [spaces, communityUuid, parentSpaceUuid];
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'spacesUuids': spaces.map((space) => space.uuid).toList(),
|
||||
};
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
import 'package:syncrow_web/pages/space_management_v2/modules/reorder_spaces/domain/params/reorder_spaces_param.dart';
|
||||
|
||||
abstract interface class ReorderSpacesService {
|
||||
Future<void> reorderSpaces(ReorderSpacesParam param);
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:syncrow_web/pages/space_management_v2/modules/reorder_spaces/domain/params/reorder_spaces_param.dart';
|
||||
import 'package:syncrow_web/pages/space_management_v2/modules/reorder_spaces/domain/services/reorder_spaces_service.dart';
|
||||
import 'package:syncrow_web/services/api/api_exception.dart';
|
||||
|
||||
part 'reorder_spaces_event.dart';
|
||||
part 'reorder_spaces_state.dart';
|
||||
|
||||
class ReorderSpacesBloc extends Bloc<ReorderSpacesEvent, ReorderSpacesState> {
|
||||
ReorderSpacesBloc(
|
||||
this._reorderSpacesService,
|
||||
) : super(const ReorderSpacesInitial()) {
|
||||
on<ReorderSpacesEvent>(_onReorderSpacesEvent);
|
||||
}
|
||||
|
||||
final ReorderSpacesService _reorderSpacesService;
|
||||
|
||||
Future<void> _onReorderSpacesEvent(
|
||||
ReorderSpacesEvent event,
|
||||
Emitter<ReorderSpacesState> emit,
|
||||
) async {
|
||||
emit(const ReorderSpacesLoading());
|
||||
try {
|
||||
await _reorderSpacesService.reorderSpaces(event.param);
|
||||
emit(const ReorderSpacesSuccess());
|
||||
} on APIException catch (e) {
|
||||
emit(ReorderSpacesFailure(e.message));
|
||||
} catch (e) {
|
||||
emit(ReorderSpacesFailure(e.toString()));
|
||||
} finally {
|
||||
emit(const ReorderSpacesInitial());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
part of 'reorder_spaces_bloc.dart';
|
||||
|
||||
final class ReorderSpacesEvent extends Equatable {
|
||||
const ReorderSpacesEvent(this.param);
|
||||
|
||||
final ReorderSpacesParam param;
|
||||
|
||||
@override
|
||||
List<Object> get props => [param];
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
part of 'reorder_spaces_bloc.dart';
|
||||
|
||||
sealed class ReorderSpacesState extends Equatable {
|
||||
const ReorderSpacesState();
|
||||
|
||||
@override
|
||||
List<Object> get props => [];
|
||||
}
|
||||
|
||||
final class ReorderSpacesInitial extends ReorderSpacesState {
|
||||
const ReorderSpacesInitial();
|
||||
}
|
||||
|
||||
final class ReorderSpacesLoading extends ReorderSpacesState {
|
||||
const ReorderSpacesLoading();
|
||||
}
|
||||
|
||||
final class ReorderSpacesSuccess extends ReorderSpacesState {
|
||||
const ReorderSpacesSuccess();
|
||||
}
|
||||
|
||||
final class ReorderSpacesFailure extends ReorderSpacesState {
|
||||
const ReorderSpacesFailure(this.errorMessage);
|
||||
|
||||
final String errorMessage;
|
||||
|
||||
@override
|
||||
List<Object> get props => [errorMessage];
|
||||
}
|
@ -103,7 +103,9 @@ class SpaceDetailsDevicesBox extends StatelessWidget {
|
||||
).then((resultSpace) {
|
||||
if (resultSpace != null) {
|
||||
if (context.mounted) {
|
||||
context.read<SpaceDetailsModelBloc>().add(UpdateSpaceDetails(resultSpace));
|
||||
context
|
||||
.read<SpaceDetailsModelBloc>()
|
||||
.add(UpdateSpaceDetails(resultSpace));
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -133,6 +135,9 @@ class SpaceDetailsDevicesBox extends StatelessWidget {
|
||||
DeviceType.ThreeTouch => Assets.gangSwitch,
|
||||
DeviceType.NCPS => Assets.sensors,
|
||||
DeviceType.PC => Assets.powerClamp,
|
||||
DeviceType.fourSceen => Assets.fourSceenSwitch,
|
||||
DeviceType.sixSceen => Assets.sixSceenSwitch,
|
||||
DeviceType.SOS => Assets.sos,
|
||||
DeviceType.Other => Assets.blackLogo,
|
||||
null => Assets.blackLogo,
|
||||
};
|
||||
|
Reference in New Issue
Block a user