-
-
Notifications
You must be signed in to change notification settings - Fork 45
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Is your feature request related to a problem? Please describe.
Hi, I am working on this PR jupyterlab/jupyterlab#13093 . There is a need to dynamically update YSyncConfig after the initialization of EditorView. I think ySyncFacet is a nice place to do this. However YSyncPluginValue reads this facet during construction, and caches its value. So changing ySyncFacet after the initialization of EditorView has no effect on YSyncPluginValue.
I am changing ySyncFacet by using CodeMirror compartment.
packages/codemirror/src/editor.ts
...
const ySyncFacetCompartment = new Compartment();
...
this._editor = Private.createEditor(
host,
fullConfig,
this._yeditorBinding,
this._editorConfig,
[
this._markField,
Prec.high(domEventHandlers),
updateListener,
translation,
// might need some precedence setup here.
ySyncFacetCompartment.of(
ySyncFacet.of(
new YSyncConfig(
this._yeditorBinding?.text,
this._yeditorBinding?.awareness
)
)
),
]
);
...
// every time the model is switched, we need to re-initialize the editor binding
this.model.sharedModelSwitched.connect(() => {
this._initializeEditorBinding();
// it does change ySyncFacet. However YSyncPluginValue already cached old value.
this._editor.dispatch({
effects: ySyncFacetCompartment.reconfigure(
ySyncFacet.of(
new YSyncConfig(
this._yeditorBinding?.text,
this._yeditorBinding?.awareness
)
)
)
});
}, this);
...
Describe the solution you'd like
I think just not caching the facet value can solve the problem.
Describe alternatives you've considered
No
Additional context
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request