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

Loading…
Cancel
Save