Digital PCT265 story PCT-135: Deep equals check for replacement changes.
This commit is contained in:
parent
75104dbe4d
commit
3ed40e52be
@ -19,7 +19,7 @@ public extension MoleculeModelProtocol {
|
||||
|
||||
static var categoryCodingKey: String { "moleculeName" }
|
||||
|
||||
func isEqual(to model: ModelProtocol) -> Bool {
|
||||
func isEqual(to model: ModelComparisonProtocol) -> Bool {
|
||||
guard let model = model as? Self else { return false }
|
||||
return moleculeName == model.moleculeName
|
||||
&& backgroundColor == model.backgroundColor
|
||||
|
||||
@ -181,3 +181,13 @@ public extension ParentModelProtocol {
|
||||
return allDiffs
|
||||
}
|
||||
}
|
||||
|
||||
public extension ModelComparisonProtocol where Self: MoleculeModelProtocol {
|
||||
|
||||
func deepEquals(to model: ModelProtocol) -> Bool {
|
||||
if let self = self as? ParentModelProtocol {
|
||||
return self.deepEquals(to: model)
|
||||
}
|
||||
return isEqual(to: model)
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
|
||||
|
||||
// Top level check to return a new root molecule.
|
||||
if let updatedMolecule = moleculeModels.first(where: { rootMolecule.id == $0.id }) {
|
||||
guard !updatedMolecule.isEqual(to: rootMolecule) else {
|
||||
guard !updatedMolecule.deepEquals(to: rootMolecule) else {
|
||||
debugLog("top molecule \(updatedMolecule) is the same as \(rootMolecule). skipping...")
|
||||
return rootMolecule
|
||||
}
|
||||
@ -86,7 +86,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
|
||||
moleculeModels.forEach { newMolecule in
|
||||
do {
|
||||
if let replacedMolecule = try parentMolecule.replaceChildMolecule(with: newMolecule) {
|
||||
guard !replacedMolecule.isEqual(to: newMolecule) else {
|
||||
guard !replacedMolecule.deepEquals(to: newMolecule) else {
|
||||
// Note: Slight risk here of replacing the something in the original tree and misreporting that is it not replaced based on equality.
|
||||
debugLog("deep molecule \(newMolecule) is the same as \(replacedMolecule). skipping...")
|
||||
return
|
||||
@ -107,7 +107,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
|
||||
}
|
||||
let hasReplacement = !changeList.isEmpty
|
||||
changes.append(contentsOf: changeList)
|
||||
debugLog("replacing \(hasReplacement ? updatedRootMolecules.count : 0) molecules")
|
||||
debugLog("replacing \(hasReplacement ? updatedRootMolecules.count : 0) molecules for \(changes)")
|
||||
return hasReplacement ? updatedRootMolecules : nil
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user