import { BuildableComponent } from '../component/buildable_component.js';
import { Reporter } from '../../reporter/reporter.js';
import { checkPropTypes } from '../../lib.js';
import { Component } from '../../component/component.js';
import { ThemeGroup } from '../theme/theme_group.js';
import { WrappedImage } from '../image/wrapped_image.js';
import { Project } from '../../project.js';
/** Connector */
class Theme extends BuildableComponent {
/**
* @param {Reporter} reporter
* @param {Object} settings
* @param {UUID} [settings.id]
* @param {string} settings.name
* @param {ThemeGroup} settings.group
* @param {WrappedImage} [settings.thumbnail]
*/
constructor(reporter, settings) {
// this component should not be auto linked in parent class
super(reporter, settings);
checkPropTypes(
settings,
{
name: 'string',
group: ThemeGroup
},
{}
);
// this.exportName = 'themes';
}
static _exportName = {
singular: 'theme',
plural: 'themes'
};
/**
* 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':
for (let setQuality of Component.qualities) {
this._setContent('main', setQuality, {
"id": this._settings.id,
"name": this._settings.name,
"group": this._settings.group.id
});
}
// this.report({ msg: `Built theme` });
break;
default:
this._setContent(part, quality, null);
break;
}
return this;
}
}
export { Theme };