import { Reporter } from '../../reporter/reporter.js';
import { checkPropTypes } from '../../lib.js';
import { BuildableComponent } from '../component/buildable_component.js';
import { GeometryFile } from '../geometry/geometry_file.js';
import { Project } from '../../project.js';
/** ProductBuilder Geometry */
class Geometry extends BuildableComponent {
/**
* @param {Reporter} reporter
* @param {Object} settings
* @param {UUID} [settings.id]
* @param {string} [settings.name]
* @param {string} settings.geometryName
* @param {Array<GeometryFile>} settings.file
*/
constructor(reporter, settings) {
super(
reporter,
settings,
{
parse: {
file: 'alternatives'
}
}
);
checkPropTypes(
settings,
{
file: val => Array.isArray(val) ? val.every(file => file instanceof GeometryFile ) : val instanceof GeometryFile,
geometryName: 'string'
},
{}
);
// this.exportName = 'geometries';
}
static _exportName = {
singular: 'geometry',
plural: 'geometries'
};
/**
* @param {ComponentPart} part
* @param {LoadingQuality} quality
* @returns {Promise<Geometry>}
*/
async _build(part, quality, dependencies) {
this._status[ part ][ quality ].setState( 'loading' );
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':
// dependencies in function argument should contain only the
// selected (ready) geo file of the potentially multiple alternatives
// console.log( 'build geo', this._settings)
this._setContent(
'main',
quality,
dependencies.file.content.main[ quality ].geometries[ this._settings.geometryName ]
);
break;
default:
this._setContent(part, quality, null);
break;
}
return this;
}
}
export { Geometry };