Skip to content

Commit 1555cf0

Browse files
authored
Fix release pointer cancel in resizer (#6574)
* Fix release pointer cancellation * Ensure strings in assets src
1 parent a94cf25 commit 1555cf0

File tree

6 files changed

+25
-10
lines changed

6 files changed

+25
-10
lines changed

packages/core/src/asset_manager/model/Asset.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export default class Asset extends Model {
3838
* asset.getSrc(); // -> 'https://.../image.png'
3939
* */
4040
getSrc() {
41-
return this.get('src');
41+
return this.get('src') || '';
4242
}
4343

4444
/**
@@ -51,7 +51,7 @@ export default class Asset extends Model {
5151
* asset.getFilename(); // -> 'image'
5252
* */
5353
getFilename() {
54-
return this.get('src').split('/').pop().split('?').shift();
54+
return this.getSrc().split('/').pop().split('?').shift();
5555
}
5656

5757
/**

packages/core/src/editor/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -567,11 +567,12 @@ export default class Editor implements IBaseModule<EditorConfig> {
567567
/**
568568
* Load data from the JSON project
569569
* @param {Object} data Project to load
570+
* @param {Object} [options] Custom options that could be passed to the project load events.
570571
* @example
571572
* editor.loadProjectData({ pages: [...], styles: [...], ... })
572573
*/
573-
loadProjectData(data: ProjectData) {
574-
return this.em.loadData(data);
574+
loadProjectData(data: ProjectData, options: EditorLoadOptions & Record<string, unknown> = {}) {
575+
return this.em.loadData(data, options);
575576
}
576577

577578
storeData() {

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ const deps: (new (em: EditorModel) => IModule)[] = [
7171
DataSourceManager,
7272
];
7373
const storableDeps: (new (em: EditorModel) => IModule & IStorableModule)[] = [
74+
DataSourceManager, // Ensure DS are loaded before other modules
7475
AssetManager,
7576
CssComposer,
7677
PageManager,
7778
ComponentManager,
78-
DataSourceManager,
7979
];
8080

8181
Extender({ $ });
@@ -115,6 +115,7 @@ export default class EditorModel extends Model {
115115
events = EditorEvents;
116116
__skip = false;
117117
defaultRunning = false;
118+
loadTriggered = false;
118119
destroyed = false;
119120
_config: InitEditorConfig;
120121
_storageTimeout?: ReturnType<typeof setTimeout>;
@@ -460,7 +461,7 @@ export default class EditorModel extends Model {
460461
* */
461462
handleUpdates(model: any, val: any, opt: any = {}) {
462463
// Component has been added temporarily - do not update storage or record changes
463-
if (this.__skip || opt.temporary || opt.noCount || opt.avoidStore || opt.partial || !this.get('ready')) {
464+
if (this.__skip || !this.loadTriggered || opt.temporary || opt.noCount || opt.avoidStore || opt.partial) {
464465
return;
465466
}
466467

@@ -906,14 +907,16 @@ export default class EditorModel extends Model {
906907
return project;
907908
}
908909

909-
loadData(project: ProjectData = {}, opts: EditorLoadOptions = {}): ProjectData {
910+
loadData(project: ProjectData = {}, options: EditorLoadOptions = {}): ProjectData {
911+
const evData = { project, options, initial: !!options.initial };
910912
let loaded = false;
911913
if (!isEmptyObj(project)) {
912914
this.storables.forEach((module) => module.clear());
913915
this.storables.forEach((module) => module.load(project));
914916
loaded = true;
915917
}
916-
this.trigger(EditorEvents.projectLoad, { project, loaded, initial: !!opts.initial });
918+
this.trigger(EditorEvents.projectLoad, { ...evData, loaded });
919+
loaded && this.trigger(EditorEvents.projectLoaded, evData);
917920
return project;
918921
}
919922

packages/core/src/editor/types.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ export enum EditorEvents {
3535
*/
3636
projectLoad = 'project:load',
3737

38+
/**
39+
* @event `project:loaded` Similar to `project:load`, but triggers only if the project is loaded successfully.
40+
* @example
41+
* editor.on('project:loaded', ({ project, initial }) => { ... });
42+
*
43+
* // Loading an empty project, won't trigger this event.
44+
* editor.loadProjectData({});
45+
*/
46+
projectLoaded = 'project:loaded',
47+
3848
/**
3949
* @event `project:get` Event triggered on request of the project data. This can be used to extend the project with custom data.
4050
* @example

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ export default class EditorView extends View<EditorModel> {
1212
model.once('change:ready', () => {
1313
Panels.active();
1414
Panels.disableButtons();
15-
UndoManager.clear();
1615

1716
if (model.getConfig().telemetry) {
1817
this.sendTelemetryData().catch(() => {
@@ -22,6 +21,8 @@ export default class EditorView extends View<EditorModel> {
2221

2322
setTimeout(() => {
2423
model.trigger(EditorEvents.load, model.Editor);
24+
model.loadTriggered = true;
25+
UndoManager.clear();
2526
model.clearDirtyCount();
2627
});
2728
});

packages/core/src/utils/Resizer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ export default class Resizer {
581581
this.updateRect(true, ev);
582582
}
583583

584-
this.selectedHandler?.releasePointerCapture(ev.pointerId);
584+
ev.pointerId && this.selectedHandler?.releasePointerCapture(ev.pointerId);
585585
this.toggleFrames();
586586
this.onEnd?.(ev, { docs, config, el, resizer: this });
587587
this.moved = false;

0 commit comments

Comments
 (0)