From 9e9ef64347d7ccf28396fc488953563db9d4d1e8 Mon Sep 17 00:00:00 2001 From: Juri Sacchetta Date: Fri, 9 Dec 2022 18:12:11 +0100 Subject: [PATCH] Revert "Fixed issue #696" This reverts commit 4e48925d --- packages/dart/lib/src/objects/parse_base.dart | 14 ++---- .../dart/lib/src/objects/parse_object.dart | 3 -- .../dart/lib/src/objects/parse_relation.dart | 46 ++++++++----------- .../dart/lib/src/utils/parse_decoder.dart | 4 +- 4 files changed, 25 insertions(+), 42 deletions(-) diff --git a/packages/dart/lib/src/objects/parse_base.dart b/packages/dart/lib/src/objects/parse_base.dart index 78ae7017c..1edc5908c 100644 --- a/packages/dart/lib/src/objects/parse_base.dart +++ b/packages/dart/lib/src/objects/parse_base.dart @@ -139,8 +139,7 @@ abstract class ParseBase { } else if (key == keyVarAcl) { _getObjectData()[keyVarAcl] = ParseACL().fromJson(value); } else { - _getObjectData()[key] = - parseDecode(value, key: key, parent: this as ParseObject); + _getObjectData()[key] = parseDecode(value); } }); @@ -196,17 +195,12 @@ abstract class ParseBase { if (_getObjectData()[key] == value && !forceUpdate) { return; } - if (_getObjectData()[key] is! ParseRelation) { - _getObjectData()[key] = - ParseMergeTool().mergeWithPrevious(_unsavedChanges[key], value); - } else { - _unsavedChanges[key] = - ParseMergeTool().mergeWithPrevious(_unsavedChanges[key], value); - } + _getObjectData()[key] = + ParseMergeTool().mergeWithPrevious(_unsavedChanges[key], value); } else { _getObjectData()[key] = value; - _unsavedChanges[key] = _getObjectData()[key]; } + _unsavedChanges[key] = _getObjectData()[key]; } /// Gets type [T] from objectData diff --git a/packages/dart/lib/src/objects/parse_object.dart b/packages/dart/lib/src/objects/parse_object.dart index 7483c8021..3a2ee5728 100644 --- a/packages/dart/lib/src/objects/parse_object.dart +++ b/packages/dart/lib/src/objects/parse_object.dart @@ -310,9 +310,6 @@ class ParseObject extends ParseBase implements ParseCloneable { /// Get the instance of ParseRelation class associated with the given key. ParseRelation getRelation(String key) { - if (_getObjectData().containsKey(key)) { - return _getObjectData()[key]; - } return ParseRelation(parent: this, key: key); } diff --git a/packages/dart/lib/src/objects/parse_relation.dart b/packages/dart/lib/src/objects/parse_relation.dart index 0665e98a7..678414821 100644 --- a/packages/dart/lib/src/objects/parse_relation.dart +++ b/packages/dart/lib/src/objects/parse_relation.dart @@ -9,55 +9,47 @@ class ParseRelation { _targetClass = parent.get(key)!.getTargetClass; _parent = parent; _key = key; + _parentObjectId = parent.objectId!; } - ParseRelation.fromJson( - Map map, ParseObject parent, String key) { - _parent = parent; - _key = key; + ParseRelation.fromJson(Map map) { + _knownObjects = parseDecode(map['objects']); _targetClass = map['className']; - _knownObjects = parseDecode(map['objects']) ?? {}; } //The owning object of this ParseRelation - late final ParseObject _parent; + ParseObject? _parent; + // The object Id of the parent. + String _parentObjectId = ''; //The className of the target objects. - late final String _targetClass; + String? _targetClass; //The key of the relation in the parent object. - late final String _key; + String _key = ''; //For offline caching, we keep track of every object we've known to be in the relation. - late final Set _knownObjects; + Set? _knownObjects = {}; QueryBuilder getQuery() { - return QueryBuilder(ParseCoreData.instance.createObject(_targetClass)) - ..whereRelatedTo(_key, _parent.parseClassName, _parent.objectId!); + return QueryBuilder(ParseCoreData.instance.createObject(_targetClass!)) + ..whereRelatedTo(_key, _parent!.parseClassName, _parentObjectId); } void add(T object) { - _parent.addRelation(_key, [object]); - _knownObjects.add(object); + _targetClass = object.parseClassName; + _knownObjects!.add(object); + _parent!.addRelation(_key, _knownObjects!.toList()); } void remove(T object) { - _parent.removeRelation(_key, [object]); - _knownObjects.remove(object); - } - - void addAll(List object) { - _parent.addRelation(_key, object); - _knownObjects.addAll(object); - } - - void removeAll(List object) { - _parent.removeRelation(_key, object); - _knownObjects.removeAll(object); + _targetClass = object.parseClassName; + _knownObjects!.remove(object); + _parent!.removeRelation(_key, _knownObjects!.toList()); } - String get getTargetClass => _targetClass; + String get getTargetClass => _targetClass ?? ''; Map toJson() => { '__type': keyRelation, 'className': _targetClass, - 'objects': parseEncode(_knownObjects.toList()) + 'objects': parseEncode(_knownObjects?.toList()) }; } diff --git a/packages/dart/lib/src/utils/parse_decoder.dart b/packages/dart/lib/src/utils/parse_decoder.dart index ab175341f..08866d6bd 100644 --- a/packages/dart/lib/src/utils/parse_decoder.dart +++ b/packages/dart/lib/src/utils/parse_decoder.dart @@ -17,7 +17,7 @@ Map _convertJSONObjectToMap(Map object) { } /// Decode any type value -dynamic parseDecode(dynamic value, {String? key, ParseObject? parent}) { +dynamic parseDecode(dynamic value) { if (value is List) { return _convertJSONArrayToList(value); } @@ -73,7 +73,7 @@ dynamic parseDecode(dynamic value, {String? key, ParseObject? parent}) { case 'Relation': // ignore: always_specify_types //TODO: bug with custom object relations - return ParseRelation.fromJson(map, parent!, key!); + return ParseRelation.fromJson(map); } }