Browse Source

Fix release pointer cancellation

fix-release-pointer-canc
Artur Arseniev 1 year ago
parent
commit
4a5037dce1
  1. 5
      packages/core/src/editor/index.ts
  2. 11
      packages/core/src/editor/model/Editor.ts
  3. 10
      packages/core/src/editor/types.ts
  4. 3
      packages/core/src/editor/view/EditorView.ts
  5. 2
      packages/core/src/utils/Resizer.ts

5
packages/core/src/editor/index.ts

@ -567,11 +567,12 @@ export default class Editor implements IBaseModule<EditorConfig> {
/**
* Load data from the JSON project
* @param {Object} data Project to load
* @param {Object} [options] Custom options that could be passed to the project load events.
* @example
* editor.loadProjectData({ pages: [...], styles: [...], ... })
*/
loadProjectData(data: ProjectData) {
return this.em.loadData(data);
loadProjectData(data: ProjectData, options: EditorLoadOptions & Record<string, unknown> = {}) {
return this.em.loadData(data, options);
}
storeData() {

11
packages/core/src/editor/model/Editor.ts

@ -71,11 +71,11 @@ const deps: (new (em: EditorModel) => IModule)[] = [
DataSourceManager,
];
const storableDeps: (new (em: EditorModel) => IModule & IStorableModule)[] = [
DataSourceManager, // Ensure DS are loaded before other modules
AssetManager,
CssComposer,
PageManager,
ComponentManager,
DataSourceManager,
];
Extender({ $ });
@ -115,6 +115,7 @@ export default class EditorModel extends Model {
events = EditorEvents;
__skip = false;
defaultRunning = false;
loadTriggered = false;
destroyed = false;
_config: InitEditorConfig;
_storageTimeout?: ReturnType<typeof setTimeout>;
@ -460,7 +461,7 @@ export default class EditorModel extends Model {
* */
handleUpdates(model: any, val: any, opt: any = {}) {
// Component has been added temporarily - do not update storage or record changes
if (this.__skip || opt.temporary || opt.noCount || opt.avoidStore || opt.partial || !this.get('ready')) {
if (this.__skip || !this.loadTriggered || opt.temporary || opt.noCount || opt.avoidStore || opt.partial) {
return;
}
@ -906,14 +907,16 @@ export default class EditorModel extends Model {
return project;
}
loadData(project: ProjectData = {}, opts: EditorLoadOptions = {}): ProjectData {
loadData(project: ProjectData = {}, options: EditorLoadOptions = {}): ProjectData {
const evData = { project, options, initial: !!options.initial };
let loaded = false;
if (!isEmptyObj(project)) {
this.storables.forEach((module) => module.clear());
this.storables.forEach((module) => module.load(project));
loaded = true;
}
this.trigger(EditorEvents.projectLoad, { project, loaded, initial: !!opts.initial });
this.trigger(EditorEvents.projectLoad, { ...evData, loaded });
loaded && this.trigger(EditorEvents.projectLoaded, evData);
return project;
}

10
packages/core/src/editor/types.ts

@ -35,6 +35,16 @@ export enum EditorEvents {
*/
projectLoad = 'project:load',
/**
* @event `project:loaded` Similar to `project:load`, but triggers only if the project is loaded successfully.
* @example
* editor.on('project:loaded', ({ project, initial }) => { ... });
*
* // Loading an empty project, won't trigger this event.
* editor.loadProjectData({});
*/
projectLoaded = 'project:loaded',
/**
* @event `project:get` Event triggered on request of the project data. This can be used to extend the project with custom data.
* @example

3
packages/core/src/editor/view/EditorView.ts

@ -12,7 +12,6 @@ export default class EditorView extends View<EditorModel> {
model.once('change:ready', () => {
Panels.active();
Panels.disableButtons();
UndoManager.clear();
if (model.getConfig().telemetry) {
this.sendTelemetryData().catch(() => {
@ -22,6 +21,8 @@ export default class EditorView extends View<EditorModel> {
setTimeout(() => {
model.trigger(EditorEvents.load, model.Editor);
model.loadTriggered = true;
UndoManager.clear();
model.clearDirtyCount();
});
});

2
packages/core/src/utils/Resizer.ts

@ -581,7 +581,7 @@ export default class Resizer {
this.updateRect(true, ev);
}
this.selectedHandler?.releasePointerCapture(ev.pointerId);
ev.pointerId && this.selectedHandler?.releasePointerCapture(ev.pointerId);
this.toggleFrames();
this.onEnd?.(ev, { docs, config, el, resizer: this });
this.moved = false;

Loading…
Cancel
Save