Browse Source

Improve isInstanceOf

fixes-symbols
Artur Arseniev 2 years ago
parent
commit
7ff3bc9b21
  1. 6
      src/dom_components/index.ts
  2. 7
      src/dom_components/model/Component.ts

6
src/dom_components/index.ts

@ -522,7 +522,7 @@ export default class ComponentManager extends ItemManagerModule<DomComponentsCon
const extendType = this.getType(extend!);
const extendViewType = this.getType(extendView!);
const typeToExtend = extendType ? extendType : compType ? compType : this.getType('default');
const modelToExt = typeToExtend.model;
const modelToExt = typeToExtend.model as typeof Component;
const viewToExt = extendViewType ? extendViewType.view : typeToExtend.view;
// Function for extending source object methods
@ -543,12 +543,16 @@ export default class ComponentManager extends ItemManagerModule<DomComponentsCon
if (typeof model === 'object') {
const modelDefaults = { defaults: model.defaults };
delete model.defaults;
const typeExtends = new Set(modelToExt.typeExtends);
typeExtends.add(modelToExt.getDefaults().type);
methods.model = modelToExt.extend(
{
...model,
...getExtendedObj(extendFn, model, modelToExt),
},
{
typeExtends,
isComponent: compType && !extendType && !isComponent ? modelToExt.isComponent : isComponent || (() => 0),
}
);

7
src/dom_components/model/Component.ts

@ -1771,7 +1771,10 @@ export default class Component extends StyleableModel<ComponentProperties> {
if (!cmp) return false;
return this instanceof cmp;
// A tiny hack to make isInstanceOf work properly where there a multiple inheritance
const { typeExtends } = this.constructor as typeof Component;
return this instanceof cmp || typeExtends.has(type);
}
/**
@ -1861,6 +1864,8 @@ export default class Component extends StyleableModel<ComponentProperties> {
selector && selector.set({ name: id, label: id });
}
static typeExtends = new Set<string>();
static getDefaults() {
return result(this.prototype, 'defaults');
}

Loading…
Cancel
Save