added internal id for mapping spaces internally

This commit is contained in:
hannathkadher
2024-11-27 19:17:15 +04:00
parent 2d7415448c
commit 79b3d116ca
4 changed files with 45 additions and 43 deletions

View File

@ -3,6 +3,7 @@ import 'package:syncrow_web/pages/spaces_management/model/community_model.dart';
import 'package:syncrow_web/pages/spaces_management/model/connection_model.dart';
import 'package:syncrow_web/pages/spaces_management/model/selected_product_model.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:uuid/uuid.dart';
enum SpaceStatus { newSpace, modified, unchanged, deleted }
@ -20,12 +21,14 @@ class SpaceModel {
bool isHovered;
SpaceStatus status;
List<SelectedProduct> selectedProducts;
String internalId;
List<Connection> outgoingConnections = []; // Connections from this space
Connection? incomingConnection; // Connections to this space
SpaceModel({
this.uuid,
String? internalId,
this.spaceTuyaUuid,
required this.icon,
required this.name,
@ -39,25 +42,44 @@ class SpaceModel {
this.incomingConnection,
this.status = SpaceStatus.unchanged,
this.selectedProducts = const [],
});
}) : internalId = internalId ?? const Uuid().v4();
factory SpaceModel.fromJson(Map<String, dynamic> json) {
// Create SpaceModel instance first
final instance = SpaceModel(
factory SpaceModel.fromJson(Map<String, dynamic> json, {String? parentInternalId}) {
final String internalId = json['internalId'] ?? const Uuid().v4();
final List<SpaceModel> children = json['children'] != null
? (json['children'] as List).map((childJson) {
return SpaceModel.fromJson(
childJson,
parentInternalId: internalId,
);
}).toList()
: [];
return SpaceModel(
internalId: internalId,
uuid: json['uuid'] ?? '',
spaceTuyaUuid: json['spaceTuyaUuid'],
name: json['spaceName'],
isPrivate: json['isPrivate'] ?? false,
invitationCode: json['invitationCode'],
parent: json['parent'] != null ? SpaceModel.fromJson(json['parent']) : null,
parent: parentInternalId != null
? SpaceModel(
internalId: parentInternalId,
uuid: json['parent']?['uuid'],
spaceTuyaUuid: json['parent']?['spaceTuyaUuid'],
name: json['parent']?['spaceName'] ?? '',
isPrivate: json['parent']?['isPrivate'] ?? false,
invitationCode: json['parent']?['invitationCode'],
children: [],
position: Offset(json['parent']?['x'] ?? 0, json['parent']?['y'] ?? 0),
icon: json['parent']?['icon'] ?? Assets.location,
)
: null,
community: json['community'] != null ? CommunityModel.fromJson(json['community']) : null,
children: json['children'] != null
? (json['children'] as List).map((child) => SpaceModel.fromJson(child)).toList()
: [],
icon: json['icon'] != null? json['icon'] : Assets.location,
position: json['x'] != null && json['y'] != null
? Offset(json['x'], json['y'])
: const Offset(0, 0),
children: children,
icon: json['icon'] ?? Assets.location,
position: Offset(json['x'] ?? 0, json['y'] ?? 0),
isHovered: false,
selectedProducts: json['spaceProducts'] != null
? (json['spaceProducts'] as List).map((product) {
@ -68,21 +90,6 @@ class SpaceModel {
}).toList()
: [],
);
// Add incomingConnection to the instance after creation
if (json['incomingConnections'] != null &&
json['incomingConnections'] is List &&
(json['incomingConnections'] as List).isNotEmpty &&
instance.parent != null) {
final conn = json['incomingConnections'][0];
instance.incomingConnection = Connection(
startSpace: instance.parent ?? instance, // Parent space
endSpace: instance, // This space instance
direction: conn['direction'],
);
}
return instance;
}
Map<String, dynamic> toMap() {
@ -106,5 +113,4 @@ class SpaceModel {
void addOutgoingConnection(Connection connection) {
outgoingConnections.add(connection);
}
}