mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-11-26 22:14:56 +00:00
@ -5,6 +5,7 @@ import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_spac
|
||||
import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_space_model_state.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/space_model/models/create_space_template_body_model.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/space_model/models/subspace_template_model.dart';
|
||||
import 'package:syncrow_web/pages/spaces_management/space_model/models/tag_update_model.dart';
|
||||
import 'package:syncrow_web/services/space_model_mang_api.dart';
|
||||
import 'package:syncrow_web/utils/constants/action_enum.dart';
|
||||
@ -20,7 +21,7 @@ class CreateSpaceModelBloc
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
late final spaceTemplate = event.spaceTemplate;
|
||||
late SpaceTemplateModel spaceTemplate = event.spaceTemplate;
|
||||
|
||||
final tagBodyModels =
|
||||
spaceTemplate.tags?.map((tag) => tag.toTagBodyModel()).toList() ??
|
||||
@ -54,7 +55,7 @@ class CreateSpaceModelBloc
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
emit(const CreateSpaceModelError('Error creating space model'));
|
||||
emit(CreateSpaceModelError('Error creating space model'));
|
||||
}
|
||||
});
|
||||
|
||||
@ -64,14 +65,14 @@ class CreateSpaceModelBloc
|
||||
if (_space != null) {
|
||||
emit(CreateSpaceModelLoaded(_space!));
|
||||
} else {
|
||||
emit(const CreateSpaceModelError('No space template found'));
|
||||
emit(CreateSpaceModelError("No space template found"));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
on<UpdateSpaceTemplate>((event, emit) {
|
||||
_space = event.spaceTemplate;
|
||||
final errorMessage = _checkDuplicateModelName(
|
||||
final String? errorMessage = _checkDuplicateModelName(
|
||||
event.allModels ?? [], event.spaceTemplate.modelName);
|
||||
emit(CreateSpaceModelLoaded(_space!, errorMessage: errorMessage));
|
||||
});
|
||||
@ -93,8 +94,9 @@ class CreateSpaceModelBloc
|
||||
orElse: () => subspace,
|
||||
);
|
||||
|
||||
|
||||
final updatedTags = [
|
||||
...subspace.tags?.map<Tag>((tag) {
|
||||
...?subspace.tags?.map<Tag>((tag) {
|
||||
final matchingTag =
|
||||
matchingEventSubspace.tags?.firstWhere(
|
||||
(e) => e.internalId == tag.internalId,
|
||||
@ -106,7 +108,7 @@ class CreateSpaceModelBloc
|
||||
: tag;
|
||||
}) ??
|
||||
<Tag>[],
|
||||
...matchingEventSubspace.tags?.where(
|
||||
...?matchingEventSubspace.tags?.where(
|
||||
(e) =>
|
||||
subspace.tags
|
||||
?.every((t) => t.internalId != e.internalId) ??
|
||||
@ -125,7 +127,9 @@ class CreateSpaceModelBloc
|
||||
event.subspaces
|
||||
.where((e) =>
|
||||
updatedSubspaces.every((s) => s.internalId != e.internalId))
|
||||
.forEach(updatedSubspaces.add);
|
||||
.forEach((newSubspace) {
|
||||
updatedSubspaces.add(newSubspace);
|
||||
});
|
||||
|
||||
final updatedSpace =
|
||||
currentState.space.copyWith(subspaceModels: updatedSubspaces);
|
||||
@ -133,7 +137,7 @@ class CreateSpaceModelBloc
|
||||
emit(CreateSpaceModelLoaded(updatedSpace,
|
||||
errorMessage: currentState.errorMessage));
|
||||
} else {
|
||||
emit(const CreateSpaceModelError('Space template not initialized'));
|
||||
emit(CreateSpaceModelError("Space template not initialized"));
|
||||
}
|
||||
});
|
||||
|
||||
@ -159,12 +163,14 @@ class CreateSpaceModelBloc
|
||||
event.tags
|
||||
.where(
|
||||
(e) => updatedTags.every((t) => t.internalId != e.internalId))
|
||||
.forEach(updatedTags.add);
|
||||
.forEach((e) {
|
||||
updatedTags.add(e);
|
||||
});
|
||||
|
||||
emit(CreateSpaceModelLoaded(
|
||||
currentState.space.copyWith(tags: updatedTags)));
|
||||
} else {
|
||||
emit(const CreateSpaceModelError('Space template not initialized'));
|
||||
emit(CreateSpaceModelError("Space template not initialized"));
|
||||
}
|
||||
});
|
||||
|
||||
@ -174,12 +180,12 @@ class CreateSpaceModelBloc
|
||||
if (event.allModels.contains(event.name) == true) {
|
||||
emit(CreateSpaceModelLoaded(
|
||||
currentState.space,
|
||||
errorMessage: 'Duplicate Model name',
|
||||
errorMessage: "Duplicate Model name",
|
||||
));
|
||||
} else if (event.name.trim().isEmpty) {
|
||||
emit(CreateSpaceModelLoaded(
|
||||
currentState.space,
|
||||
errorMessage: 'Model name cannot be empty',
|
||||
errorMessage: "Model name cannot be empty",
|
||||
));
|
||||
} else {
|
||||
final updatedSpaceModel =
|
||||
@ -188,7 +194,7 @@ class CreateSpaceModelBloc
|
||||
emit(CreateSpaceModelLoaded(updatedSpaceModel));
|
||||
}
|
||||
} else {
|
||||
emit(const CreateSpaceModelError('Space template not initialized'));
|
||||
emit(CreateSpaceModelError("Space template not initialized"));
|
||||
}
|
||||
});
|
||||
|
||||
@ -205,17 +211,19 @@ class CreateSpaceModelBloc
|
||||
if (prevSpaceModel?.modelName != newSpaceModel.modelName) {
|
||||
spaceModelName = newSpaceModel.modelName;
|
||||
}
|
||||
var tagUpdates = <TagModelUpdate>[];
|
||||
final subspaceUpdates = <UpdateSubspaceTemplateModel>[];
|
||||
final prevSubspaces = prevSpaceModel?.subspaceModels;
|
||||
final newSubspaces = newSpaceModel.subspaceModels;
|
||||
List<TagModelUpdate> tagUpdates = [];
|
||||
final List<UpdateSubspaceTemplateModel> subspaceUpdates = [];
|
||||
final List<SubspaceTemplateModel>? prevSubspaces =
|
||||
prevSpaceModel?.subspaceModels;
|
||||
final List<SubspaceTemplateModel>? newSubspaces =
|
||||
newSpaceModel.subspaceModels;
|
||||
|
||||
tagUpdates =
|
||||
processTagUpdates(prevSpaceModel?.tags, newSpaceModel.tags);
|
||||
|
||||
if (prevSubspaces != null || newSubspaces != null) {
|
||||
if (prevSubspaces != null && newSubspaces != null) {
|
||||
for (final prevSubspace in prevSubspaces) {
|
||||
for (var prevSubspace in prevSubspaces) {
|
||||
final existsInNew = newSubspaces
|
||||
.any((subspace) => subspace.uuid == prevSubspace.uuid);
|
||||
if (!existsInNew) {
|
||||
@ -224,20 +232,20 @@ class CreateSpaceModelBloc
|
||||
}
|
||||
}
|
||||
} else if (prevSubspaces != null && newSubspaces == null) {
|
||||
for (final prevSubspace in prevSubspaces) {
|
||||
for (var prevSubspace in prevSubspaces) {
|
||||
subspaceUpdates.add(UpdateSubspaceTemplateModel(
|
||||
action: Action.delete, uuid: prevSubspace.uuid));
|
||||
}
|
||||
}
|
||||
|
||||
if (newSubspaces != null) {
|
||||
for (final newSubspace in newSubspaces) {
|
||||
for (var newSubspace in newSubspaces) {
|
||||
// Tag without UUID
|
||||
if (newSubspace.uuid == null || newSubspace.uuid!.isEmpty) {
|
||||
final tagUpdates = <TagModelUpdate>[];
|
||||
if ((newSubspace.uuid == null || newSubspace.uuid!.isEmpty)) {
|
||||
final List<TagModelUpdate> tagUpdates = [];
|
||||
|
||||
if (newSubspace.tags != null) {
|
||||
for (final tag in newSubspace.tags!) {
|
||||
for (var tag in newSubspace.tags!) {
|
||||
tagUpdates.add(TagModelUpdate(
|
||||
action: Action.add,
|
||||
newTagUuid: tag.uuid == '' ? null : tag.uuid,
|
||||
@ -255,14 +263,14 @@ class CreateSpaceModelBloc
|
||||
|
||||
if (prevSubspaces != null && newSubspaces != null) {
|
||||
final newSubspaceMap = {
|
||||
for (final subspace in newSubspaces) subspace.uuid: subspace
|
||||
for (var subspace in newSubspaces) subspace.uuid: subspace
|
||||
};
|
||||
|
||||
for (final prevSubspace in prevSubspaces) {
|
||||
for (var prevSubspace in prevSubspaces) {
|
||||
final newSubspace = newSubspaceMap[prevSubspace.uuid];
|
||||
|
||||
if (newSubspace != null) {
|
||||
final tagSubspaceUpdates =
|
||||
final List<TagModelUpdate> tagSubspaceUpdates =
|
||||
processTagUpdates(prevSubspace.tags, newSubspace.tags);
|
||||
subspaceUpdates.add(UpdateSubspaceTemplateModel(
|
||||
action: Action.update,
|
||||
@ -290,7 +298,7 @@ class CreateSpaceModelBloc
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
emit(const CreateSpaceModelError('Error creating space model'));
|
||||
emit(CreateSpaceModelError('Error creating space model'));
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -299,11 +307,11 @@ class CreateSpaceModelBloc
|
||||
List<Tag>? prevTags,
|
||||
List<Tag>? newTags,
|
||||
) {
|
||||
final tagUpdates = <TagModelUpdate>[];
|
||||
final List<TagModelUpdate> tagUpdates = [];
|
||||
final processedTags = <String?>{};
|
||||
|
||||
if (prevTags == null && newTags != null) {
|
||||
for (final newTag in newTags) {
|
||||
for (var newTag in newTags) {
|
||||
tagUpdates.add(TagModelUpdate(
|
||||
action: Action.add,
|
||||
tag: newTag.tag,
|
||||
@ -317,7 +325,7 @@ class CreateSpaceModelBloc
|
||||
if (newTags != null || prevTags != null) {
|
||||
// Case 1: Tags deleted
|
||||
if (prevTags != null && newTags != null) {
|
||||
for (final prevTag in prevTags) {
|
||||
for (var prevTag in prevTags) {
|
||||
final existsInNew =
|
||||
newTags.any((newTag) => newTag.uuid == prevTag.uuid);
|
||||
if (!existsInNew) {
|
||||
@ -326,7 +334,7 @@ class CreateSpaceModelBloc
|
||||
}
|
||||
}
|
||||
} else if (prevTags != null && newTags == null) {
|
||||
for (final prevTag in prevTags) {
|
||||
for (var prevTag in prevTags) {
|
||||
tagUpdates
|
||||
.add(TagModelUpdate(action: Action.delete, uuid: prevTag.uuid));
|
||||
}
|
||||
@ -336,7 +344,7 @@ class CreateSpaceModelBloc
|
||||
if (newTags != null) {
|
||||
final prevTagUuids = prevTags?.map((t) => t.uuid).toSet() ?? {};
|
||||
|
||||
for (final newTag in newTags) {
|
||||
for (var newTag in newTags) {
|
||||
// Tag without UUID
|
||||
if ((newTag.uuid == null || !prevTagUuids.contains(newTag.uuid)) &&
|
||||
!processedTags.contains(newTag.tag)) {
|
||||
@ -352,9 +360,9 @@ class CreateSpaceModelBloc
|
||||
|
||||
// Case 3: Tags updated
|
||||
if (prevTags != null && newTags != null) {
|
||||
final newTagMap = {for (final tag in newTags) tag.uuid: tag};
|
||||
final newTagMap = {for (var tag in newTags) tag.uuid: tag};
|
||||
|
||||
for (final prevTag in prevTags) {
|
||||
for (var prevTag in prevTags) {
|
||||
final newTag = newTagMap[prevTag.uuid];
|
||||
if (newTag != null) {
|
||||
tagUpdates.add(TagModelUpdate(
|
||||
@ -373,7 +381,7 @@ class CreateSpaceModelBloc
|
||||
|
||||
String? _checkDuplicateModelName(List<String> allModels, String name) {
|
||||
if (allModels.contains(name)) {
|
||||
return 'Duplicate Model name';
|
||||
return "Duplicate Model name";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ class UpdateSpaceTemplate extends CreateSpaceModelEvent {
|
||||
final SpaceTemplateModel spaceTemplate;
|
||||
List<String>? allModels;
|
||||
|
||||
UpdateSpaceTemplate(this.spaceTemplate, this.allModels);
|
||||
UpdateSpaceTemplate(this.spaceTemplate,this.allModels);
|
||||
}
|
||||
|
||||
class CreateSpaceTemplate extends CreateSpaceModelEvent {
|
||||
@ -36,7 +36,7 @@ class UpdateSpaceTemplateName extends CreateSpaceModelEvent {
|
||||
final String name;
|
||||
final List<String> allModels;
|
||||
|
||||
const UpdateSpaceTemplateName({required this.name, required this.allModels});
|
||||
UpdateSpaceTemplateName({required this.name, required this.allModels});
|
||||
|
||||
@override
|
||||
List<Object> get props => [name, allModels];
|
||||
@ -45,19 +45,19 @@ class UpdateSpaceTemplateName extends CreateSpaceModelEvent {
|
||||
class AddSubspacesToSpaceTemplate extends CreateSpaceModelEvent {
|
||||
final List<SubspaceTemplateModel> subspaces;
|
||||
|
||||
const AddSubspacesToSpaceTemplate(this.subspaces);
|
||||
AddSubspacesToSpaceTemplate(this.subspaces);
|
||||
}
|
||||
|
||||
class AddTagsToSpaceTemplate extends CreateSpaceModelEvent {
|
||||
final List<Tag> tags;
|
||||
|
||||
const AddTagsToSpaceTemplate(this.tags);
|
||||
AddTagsToSpaceTemplate(this.tags);
|
||||
}
|
||||
|
||||
class ValidateSpaceTemplateName extends CreateSpaceModelEvent {
|
||||
final String name;
|
||||
|
||||
const ValidateSpaceTemplateName({required this.name});
|
||||
ValidateSpaceTemplateName({required this.name});
|
||||
}
|
||||
|
||||
class ModifySpaceTemplate extends CreateSpaceModelEvent {
|
||||
@ -65,7 +65,7 @@ class ModifySpaceTemplate extends CreateSpaceModelEvent {
|
||||
final SpaceTemplateModel updatedSpaceTemplate;
|
||||
final Function(SpaceTemplateModel)? onUpdate;
|
||||
|
||||
const ModifySpaceTemplate(
|
||||
ModifySpaceTemplate(
|
||||
{required this.spaceTemplate,
|
||||
required this.updatedSpaceTemplate,
|
||||
this.onUpdate});
|
||||
|
||||
@ -16,7 +16,7 @@ class CreateSpaceModelLoaded extends CreateSpaceModelState {
|
||||
final SpaceTemplateModel space;
|
||||
final String? errorMessage;
|
||||
|
||||
const CreateSpaceModelLoaded(this.space, {this.errorMessage});
|
||||
CreateSpaceModelLoaded(this.space, {this.errorMessage});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [space, errorMessage];
|
||||
@ -25,5 +25,5 @@ class CreateSpaceModelLoaded extends CreateSpaceModelState {
|
||||
class CreateSpaceModelError extends CreateSpaceModelState {
|
||||
final String message;
|
||||
|
||||
const CreateSpaceModelError(this.message);
|
||||
CreateSpaceModelError(this.message);
|
||||
}
|
||||
|
||||
@ -21,21 +21,18 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
|
||||
on<DeleteSpaceModel>(_onDeleteSpaceModel);
|
||||
}
|
||||
|
||||
Future<void> _onCreateSpaceModel(
|
||||
CreateSpaceModel event, Emitter<SpaceModelState> emit) async {
|
||||
Future<void> _onCreateSpaceModel(CreateSpaceModel event, Emitter<SpaceModelState> emit) async {
|
||||
final currentState = state;
|
||||
|
||||
if (currentState is SpaceModelLoaded) {
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
final newSpaceModel = await api.getSpaceModel(
|
||||
event.newSpaceModel.uuid ?? '', projectUuid);
|
||||
final newSpaceModel = await api.getSpaceModel(event.newSpaceModel.uuid ?? '', projectUuid);
|
||||
|
||||
if (newSpaceModel != null) {
|
||||
final updatedSpaceModels =
|
||||
List<SpaceTemplateModel>.from(currentState.spaceModels)
|
||||
..add(newSpaceModel);
|
||||
final updatedSpaceModels = List<SpaceTemplateModel>.from(currentState.spaceModels)
|
||||
..add(newSpaceModel);
|
||||
emit(SpaceModelLoaded(spaceModels: updatedSpaceModels));
|
||||
}
|
||||
} catch (e) {
|
||||
@ -44,15 +41,13 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onUpdateSpaceModel(
|
||||
UpdateSpaceModel event, Emitter<SpaceModelState> emit) async {
|
||||
Future<void> _onUpdateSpaceModel(UpdateSpaceModel event, Emitter<SpaceModelState> emit) async {
|
||||
final currentState = state;
|
||||
if (currentState is SpaceModelLoaded) {
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
final newSpaceModel =
|
||||
await api.getSpaceModel(event.spaceModelUuid, projectUuid);
|
||||
final newSpaceModel = await api.getSpaceModel(event.spaceModelUuid, projectUuid);
|
||||
if (newSpaceModel != null) {
|
||||
final updatedSpaceModels = currentState.spaceModels.map((model) {
|
||||
return model.uuid == event.spaceModelUuid ? newSpaceModel : model;
|
||||
@ -66,16 +61,14 @@ class SpaceModelBloc extends Bloc<SpaceModelEvent, SpaceModelState> {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _onDeleteSpaceModel(
|
||||
DeleteSpaceModel event, Emitter<SpaceModelState> emit) async {
|
||||
Future<void> _onDeleteSpaceModel(DeleteSpaceModel event, Emitter<SpaceModelState> emit) async {
|
||||
final currentState = state;
|
||||
|
||||
if (currentState is SpaceModelLoaded) {
|
||||
try {
|
||||
final projectUuid = await ProjectManager.getProjectUUID() ?? '';
|
||||
|
||||
final deletedSuccessfully =
|
||||
await api.deleteSpaceModel(event.spaceModelUuid, projectUuid);
|
||||
final deletedSuccessfully = await api.deleteSpaceModel(event.spaceModelUuid, projectUuid);
|
||||
|
||||
if (deletedSuccessfully) {
|
||||
final updatedSpaceModels = currentState.spaceModels
|
||||
|
||||
Reference in New Issue
Block a user