import { BuildableComponent } from '../component/buildable_component.js';
import { Reporter } from '../../reporter/reporter.js';
import { checkPropTypes } from '../../lib.js';
import { Connector } from './connector.js';
import { WrappedImage } from '../image/wrapped_image.js';
import { Project } from '../../project.js';
/** Connector */
class ConnectorType extends BuildableComponent {
/**
* @param {Reporter} reporter
* @param {Object} settings
* @param {UUID} [settings.id]
* @param {string} settings.name
* @param {WrappedImage} [settings.thumbnail]
*/
// * @param {Package} settings.pkg
constructor(reporter, settings) {
// this component should not be auto linked in parent class
super(reporter, settings, { autoLinkDependencies: false });
checkPropTypes(
settings,
{
name: 'string'
},
{}
);
// this.exportName = 'connectorTypes';
if (settings.thumbnail) {
this._dependencies.UI = { thumbnail: settings.thumbnail };
}
}
static _exportName = {
singular: 'connectorType',
plural: 'connectorTypes'
};
/** @type {Array<Connector>} */
// _connectors = [];
get connectors() {
if (this._tree) {
return this._tree.connectorsByType[this];
}
else {
return [];
}
}
_onTreeSet() {
const component = this;
this._tree.on(
'change',
({ cls = [] }) => {
if (cls.includes(Connector)) {
component.report({ msg: 'Connector changed in package. Rebuilding.' });
this._rebuild();
}
},
this.id
);
this._rebuild();
}
_onTreeUnset() {
if (this._tree.hasListener('change', this.id)) {
this._tree.removeListener('change', this.id);
}
}
/**
* Collect material categories of this type from the package
* @protected
*/
async _build(part, quality) {
switch (part) {
case 'UI':
if (this._settings.thumbnail) {
this._setContent('UI', quality, this._settings.thumbnail.content.main[quality]);
}
else {
this._setContent('UI', quality, Project.defaultImages.missing.cloneNode(true));
}
break;
case 'main':
const connectors = this._tree?.connectors ? this._tree.connectors.filter(con => con.settings.type === this) : [];
// settings all qualities immediately here, triggers a cascade of _autoStatusUpdates => _build that results in errors
// for (let setQuality of Component.qualities) {
// this._setContent('main', setQuality, connectors);
// }
this._setContent('main', quality, connectors);
// zou de content hier niet een helper in een bep kleur moeten zijn?
// de connector kan die dan clonen en plaatsen
break;
default:
this._setContent(part, quality, null);
break;
}
return this;
}
}
export { ConnectorType };