Browse Source

Check target in canMove

pull/4427/head
Artur Arseniev 4 years ago
parent
commit
31ea637151
  1. 61
      src/dom_components/index.ts

61
src/dom_components/index.ts

@ -52,15 +52,7 @@
* *
* @module Components * @module Components
*/ */
import { import { isEmpty, isObject, isArray, isFunction, isString, result, debounce } from 'underscore';
isEmpty,
isObject,
isArray,
isFunction,
isString,
result,
debounce,
} from 'underscore';
import defaults from './config/config'; import defaults from './config/config';
import Component, { keyUpdate, keyUpdateInside } from './model/Component'; import Component, { keyUpdate, keyUpdateInside } from './model/Component';
import Components from './model/Components'; import Components from './model/Components';
@ -260,12 +252,8 @@ export default class ComponentManager extends ItemManagerModule {
em.on('change:componentHovered', this.componentHovered, this); em.on('change:componentHovered', this.componentHovered, this);
const selected = em.get('selected'); const selected = em.get('selected');
em.listenTo(selected, 'add', (sel, c, opts) => em.listenTo(selected, 'add', (sel, c, opts) => this.selectAdd(selected.getComponent(sel), opts));
this.selectAdd(selected.getComponent(sel), opts) em.listenTo(selected, 'remove', (sel, c, opts) => this.selectRemove(selected.getComponent(sel), opts));
);
em.listenTo(selected, 'remove', (sel, c, opts) =>
this.selectRemove(selected.getComponent(sel), opts)
);
} }
return this; return this;
@ -406,7 +394,7 @@ export default class ComponentManager extends ItemManagerModule {
clear(opts = {}) { clear(opts = {}) {
const components = this.getComponents(); const components = this.getComponents();
//@ts-ignore //@ts-ignore
components?.filter(Boolean).forEach((i) => i.remove(opts)); components?.filter(Boolean).forEach(i => i.remove(opts));
return this; return this;
} }
@ -430,23 +418,11 @@ export default class ComponentManager extends ItemManagerModule {
*/ */
addType(type: string, methods: any) { addType(type: string, methods: any) {
const { em } = this; const { em } = this;
const { const { model = {}, view = {}, isComponent, extend, extendView, extendFn = [], extendFnView = [] } = methods;
model = {},
view = {},
isComponent,
extend,
extendView,
extendFn = [],
extendFnView = [],
} = methods;
const compType = this.getType(type); const compType = this.getType(type);
const extendType = this.getType(extend); const extendType = this.getType(extend);
const extendViewType = this.getType(extendView); const extendViewType = this.getType(extendView);
const typeToExtend = extendType const typeToExtend = extendType ? extendType : compType ? compType : this.getType('default');
? extendType
: compType
? compType
: this.getType('default');
const modelToExt = typeToExtend.model; const modelToExt = typeToExtend.model;
const viewToExt = extendViewType ? extendViewType.view : typeToExtend.view; const viewToExt = extendViewType ? extendViewType.view : typeToExtend.view;
@ -476,10 +452,7 @@ export default class ComponentManager extends ItemManagerModule {
}, },
}, },
{ {
isComponent: isComponent: compType && !extendType && !isComponent ? modelToExt.isComponent : isComponent || (() => 0),
compType && !extendType && !isComponent
? modelToExt.isComponent
: isComponent || (() => 0),
} }
); );
} }
@ -552,9 +525,7 @@ export default class ComponentManager extends ItemManagerModule {
component.set({ component.set({
status: 'selected', status: 'selected',
}); });
['component:selected', 'component:toggled'].forEach((event) => ['component:selected', 'component:toggled'].forEach(event => this.em.trigger(event, component, opts));
this.em.trigger(event, component, opts)
);
} }
} }
@ -565,9 +536,7 @@ export default class ComponentManager extends ItemManagerModule {
status: '', status: '',
state: '', state: '',
}); });
['component:deselected', 'component:toggled'].forEach((event) => ['component:deselected', 'component:toggled'].forEach(event => this.em.trigger(event, component, opts));
this.em.trigger(event, component, opts)
);
} }
} }
@ -634,7 +603,7 @@ export default class ComponentManager extends ItemManagerModule {
source: null, source: null,
}; };
if (!source) return result; if (!source || !target) return result;
//@ts-ignore //@ts-ignore
let srcModel = source.toHTML ? source : null; let srcModel = source.toHTML ? source : null;
@ -668,11 +637,7 @@ export default class ComponentManager extends ItemManagerModule {
if (isFunction(droppable)) { if (isFunction(droppable)) {
droppable = !!droppable(srcModel, target, at); droppable = !!droppable(srcModel, target, at);
} else { } else {
if ( if (droppable === false && target.isInstanceOf('text') && srcModel.get('textable')) {
droppable === false &&
target.isInstanceOf('text') &&
srcModel.get('textable')
) {
droppable = true; droppable = true;
} else { } else {
const el = srcModel.getEl(); const el = srcModel.getEl();
@ -696,8 +661,8 @@ export default class ComponentManager extends ItemManagerModule {
destroy() { destroy() {
const all = this.allById(); const all = this.allById();
Object.keys(all).forEach((id) => all[id] && all[id].remove()); Object.keys(all).forEach(id => all[id] && all[id].remove());
this.componentView?.remove(); this.componentView?.remove();
[this.em, this.componentsById, this.componentView].forEach((i) => (i = {})); [this.em, this.componentsById, this.componentView].forEach(i => (i = {}));
} }
} }

Loading…
Cancel
Save