Browse Source

Add select delegate

pull/5546/head
Artur Arseniev 2 years ago
parent
commit
014aab6de8
  1. 2
      src/dom_components/model/Component.ts
  2. 8
      src/dom_components/model/types.ts
  3. 4
      src/editor/model/Editor.ts
  4. 2
      src/utils/mixins.ts

2
src/dom_components/model/Component.ts

@ -584,7 +584,7 @@ export default class Component extends StyleableModel<ComponentProperties> {
* component.removeAttributes('some-attr');
* component.removeAttributes(['some-attr1', 'some-attr2']);
*/
removeAttributes(attrs: string[] = [], opts: SetOptions = {}) {
removeAttributes(attrs: string | string[] = [], opts: SetOptions = {}) {
const attrArr = Array.isArray(attrs) ? attrs : [attrs];
const compAttr = this.getAttributes();
attrArr.map(i => delete compAttr[i]);

8
src/dom_components/model/types.ts

@ -42,6 +42,14 @@ export interface ComponentDelegateProps {
* }
*/
copy?: (cmp: Component) => Component | Nullable;
/**
* Delegate select command to another component.
* @example
* delegate: {
* select: (cmp) => cmp.findType('other-type')[0],
* }
*/
select?: (cmp: Component) => Component | Nullable;
}
export interface ComponentProperties {

4
src/editor/model/Editor.ts

@ -480,7 +480,7 @@ export default class EditorModel extends Model {
const { event } = opts;
const ctrlKey = event && (event.ctrlKey || event.metaKey);
const { shiftKey } = event || {};
const els = (isArray(el) ? el : [el]).map(el => getModel(el, $));
const els = (isArray(el) ? el : [el]).map(el => getModel(el, $)).map(cmp => cmp?.delegate?.select?.(cmp) || cmp);
const selected = this.getSelectedAll();
const mltSel = this.getConfig().multipleSelection;
let added;
@ -501,7 +501,7 @@ export default class EditorModel extends Model {
if (opts.useValid) {
let parent = model.parent();
while (parent && !parent.get('selectable')) parent = parent.parent();
model = parent;
model = parent!;
} else {
return;
}

2
src/utils/mixins.ts

@ -187,7 +187,7 @@ export const deepMerge = (...args: ObjectAny[]) => {
* @param {HTMLElement|Component} el Component or HTML element
* @return {Component}
*/
const getModel = (el: any, $?: any) => {
const getModel = (el: any, $?: any): Component => {
let model = el;
if (!$ && el && el.__cashData) {
model = el.__cashData.model;

Loading…
Cancel
Save