import listViewTemplates from '../../templates/list-view';
import metaBoxTemplates from '../../templates/meta-box';
import detailsViewTemplates from '../../templates/details-view';
import { SELECTORS } from '../../constants';
import ControlMeta from './control-meta';
class ControlStates {
constructor( controlWrapper ) {
this.controlWrapper = controlWrapper;
this.context = new ControlMeta( controlWrapper ).getContext();
this.action = new ControlMeta( controlWrapper ).getAction();
this.canBeRestored = new ControlMeta( controlWrapper ).canBeRestored();
this.templates = {
'list-view': listViewTemplates,
'meta-box': metaBoxTemplates,
'details-view': detailsViewTemplates,
};
}
renderNotOptimized( data ) {
this.controlWrapper.className = this.mixControlContextClass( SELECTORS.controlNotOptimizedClassName );
this.controlWrapper.innerHTML = this.getTemplates().notOptimizedTemplate( data );
this.controlWrapper.dataset.imageOptimizationStatus = 'not-optimized';
}
renderOptimized( data ) {
const canBeRestored = this.canBeRestored && data?.saved?.absolute !== 0;
this.controlWrapper.className = this.mixControlContextClass( SELECTORS.controlOptimizedClassName );
this.controlWrapper.innerHTML = this.getTemplates().optimizedTemplate( { ...data, canBeRestored } );
this.controlWrapper.dataset.imageOptimizationStatus = 'optimized';
}
renderError( { message, errorType, imagesLeft, allowRetry, action } ) {
this.controlWrapper.className = this.mixControlContextClass( SELECTORS.controlErrorClassName );
this.controlWrapper.innerHTML = this.getTemplates().errorTemplate( { message, errorType, imagesLeft, allowRetry } );
this.controlWrapper.dataset.imageOptimizationAction = action;
this.controlWrapper.dataset.imageOptimizationStatus = 'error';
}
renderLoading( action ) {
this.controlWrapper.className = this.mixControlContextClass( SELECTORS.controlLoadingClassName );
this.controlWrapper.innerHTML = this.getTemplates().loadingTemplate( action );
this.controlWrapper.dataset.imageOptimizationStatus = 'loading';
}
getTemplates() {
const template = this.templates[ this.context ];
if ( ! template ) {
throw new Error( `No templates found for the context ${ this.context }` );
}
return template;
}
mixControlContextClass( className ) {
const contextClassName = SELECTORS.controlWrapper[ this.context ];
if ( ! contextClassName ) {
throw new Error( `No context className found for the context ${ this.context }` );
}
return `${ className } ${ contextClassName }`;
}
}
export default ControlStates;