Browse Source

Add hover canvas spot

pull/5337/head
Artur Arseniev 3 years ago
parent
commit
649b80e96e
  1. 2
      src/commands/view/SelectComponent.ts
  2. 32
      src/editor/model/Editor.ts

2
src/commands/view/SelectComponent.ts

@ -212,7 +212,7 @@ export default {
}, },
onOut() { onOut() {
this.em.setHovered(0); this.em.setHovered();
}, },
toggleToolsEl(on: boolean, view: any, opts: any = {}) { toggleToolsEl(on: boolean, view: any, opts: any = {}) {

32
src/editor/model/Editor.ts

@ -628,25 +628,41 @@ export default class EditorModel extends Model {
/** /**
* Hover a component * Hover a component
* @param {Component|HTMLElement} el Component to select * @param {Component|HTMLElement} cmp Component to select
* @param {Object} [opts={}] Options, optional * @param {Object} [opts={}] Options, optional
* @private * @private
*/ */
setHovered(el: any, opts: any = {}) { setHovered(cmp?: Component | null, opts: any = {}) {
if (!el) return this.set('componentHovered', ''); const upHovered = (cmp?: Component, opts?: any) => {
const current = this.getHovered();
const type = CanvasSpotBuiltInTypes.Hover;
this.set('componentHovered', cmp || null, opts);
current?.views.forEach(componentView => {
this.Canvas.removeSpot({ type, componentView });
});
cmp?.views.forEach(componentView => {
this.Canvas.setSpot({ type, componentView });
});
};
if (!cmp) {
return upHovered();
}
const ev = 'component:hover'; const ev = 'component:hover';
let model = getModel(el, undefined); let model = getModel(cmp, undefined) as Component | undefined;
if (!model) return; if (!model) return;
opts.forceChange && this.set('componentHovered', ''); opts.forceChange && upHovered();
this.trigger(`${ev}:before`, model, opts); this.trigger(`${ev}:before`, model, opts);
// Check for valid hoverable // Check for valid hoverable
if (!model.get('hoverable')) { if (!model.get('hoverable')) {
if (opts.useValid && !opts.abort) { if (opts.useValid && !opts.abort) {
let parent = model && model.parent(); let parent = model.parent();
while (parent && !parent.get('hoverable')) parent = parent.parent(); while (parent && !parent.get('hoverable')) parent = parent.parent();
model = parent; model = parent;
} else { } else {
@ -655,13 +671,13 @@ export default class EditorModel extends Model {
} }
if (!opts.abort) { if (!opts.abort) {
this.set('componentHovered', model, opts); upHovered(model, opts);
this.trigger(ev, model, opts); this.trigger(ev, model, opts);
} }
} }
getHovered() { getHovered() {
return this.get('componentHovered'); return this.get('componentHovered') as Component | undefined;
} }
/** /**

Loading…
Cancel
Save