neos-development-collection icon indicating copy to clipboard operation
neos-development-collection copied to clipboard

BUG: Workspace module shows soft deletion for every fallback

Open mhsdesign opened this issue 11 months ago • 3 comments

When deleting a node ALL its fallbacks will be shown as soft removed:

Image

The reason for this is that the we mark all dimensions as changed that were affected by the event.

Now during evaluation of the changes we are mostly only interested in the dimension that triggered the cascade.

A naïve idea would be to skip changes where the node never occupied that part, but this is wrong as for when marking fallbacks as soft removed (which works because its an edge operation) we ignore them in the listing as well

if ($node->originDimensionSpacePoint->equals($change->originDimensionSpacePoint) === false) {
    // skip this change as the change projection also tracks affected fallback dimensions where a change never took place.
    continue;
}

mhsdesign avatar Mar 09 '25 20:03 mhsdesign

When deleting a node ALL its fallbacks will be shown as soft removed

But isn't that what effectively happens when published? So from an editor perspective it makes sense to see it?

kitsunet avatar Mar 10 '25 16:03 kitsunet

jup that is true, but for setting properties we dont show the fallbacks here for example... and i thought it would make sense to have it aligned.

mhsdesign avatar Mar 10 '25 16:03 mhsdesign

the tests show this as well:

Then I expect to have the following changes in workspace "user-workspace":
  | nodeAggregateId  | created | changed | moved | deleted | originDimensionSpacePoint |
  | nody-mc-nodeface | 0       | 0       | 0     | 1       | {"language": "de"}        |
  # different to the actual NodeAggregateWasRemoved event, we dont have the $affectedOccupiedDimensionSpacePoints and mark all dimensions as removed, also fallbacks
  | nody-mc-nodeface | 0       | 0       | 0     | 1       | {"language": "gsw"}       |

it looks really fun if you create a node and remove that because its fallback will only say it was removed:

https://github.com/neos/neos-development-collection/blob/4cde4cff0bf78d7a3252f8eceaa3fb8a2bd6a54c/Neos.Neos/Tests/Behavior/Features/PendingChanges/NodeSoftRemoval/02-SoftRemoveNodeAggregate_WithDimensions.feature#L444-L445

A fix to make this consistent would be ALWAYS to check ALL affected dimension space points ... but NodeReferencesWereSet doesnt have this information and only $affectedSourceOriginDimensionSpacePoints The fact that NodePropertiesWereSet has the $affectedDimensionSpacePoints was only done in more recent history and patched: https://github.com/neos/neos-development-collection/issues/4265

mhsdesign avatar Mar 10 '25 16:03 mhsdesign