Browse Source

Fix release pointer cancel in resizer (#6574)

* Fix release pointer cancellation

* Ensure strings in assets src
release-v0.22.12
Artur Arseniev 7 months ago
committed by GitHub
parent
commit
1555cf0957
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      packages/core/src/asset_manager/model/Asset.ts
  2. 5
      packages/core/src/editor/index.ts
  3. 11
      packages/core/src/editor/model/Editor.ts
  4. 10
      packages/core/src/editor/types.ts
  5. 3
      packages/core/src/editor/view/EditorView.ts
  6. 2
      packages/core/src/utils/Resizer.ts

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

@ -38,7 +38,7 @@ export default class Asset extends Model {
* asset.getSrc(); // -> 'https://.../image.png'
* */
getSrc() {
return this.get('src');
return this.get('src') || '';
}
/**
@ -51,7 +51,7 @@ export default class Asset extends Model {
* asset.getFilename(); // -> 'image'
* */
getFilename() {
return this.get('src').split('/').pop().split('?').shift();
return this.getSrc().split('/').pop().split('?').shift();
}
/**

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