Skip to content

PavtchManager for all objects#6691

Open
IhorKaleniuk666 wants to merge 19 commits intoGrapesJS:devfrom
IhorKaleniuk666:path-manager-any
Open

PavtchManager for all objects#6691
IhorKaleniuk666 wants to merge 19 commits intoGrapesJS:devfrom
IhorKaleniuk666:path-manager-any

Conversation

@IhorKaleniuk666
Copy link
Contributor

In this MR, an opt-in infrastructure for editor state patch tracking is introduced (as a foundation for multiplayer/collaborative features) without altering the existing GrapesJS behavior when the option is disabled.

What’s included

A new patches.enable flag is added (default: false). When disabled, the system is fully no-op and does not affect the existing API or test suite.

PatchManager is integrated into EditorModel as editor.Patches, providing batched updates via update(cb), undo/redo history, and suppression of patch logging when applying changes with apply(..., { external: true }).

A ModelWithPatches base class is implemented on top of Immer patches, intercepting set(...) calls, generating patches / inversePatches, and normalizing patch paths into a single, consistent namespace.

A CollectionWithPatches base class is implemented with stable ordering based on fractional indexing, supporting add / remove / reset / reorder, correct undo/redo semantics for reordering operations, and deterministic sorting.

Key stateful models and collections (components, CSS rules, selectors, pages, devices, blocks, and assets) are migrated to the new base classes with explicit patchObjectType and collectionId.

Testing

New unit and integration tests are added for ModelWithPatches, CollectionWithPatches, and PatchManager, covering reordering, apply(external) without feedback loops, disabled mode, and order stability under concurrent operations.

The full existing test suite passes without any changes to expectations.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants