import { Injectable } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppStateInterface, DimensionsInterface, LayoutBoxInterface, LayoutBoxModel, LayoutInterface, ProductViewImageInterface, ProductViewInterface, ProductViewItemInterface, ProductViewItemModel, } from './../../../models/index'; import { ImageTransformFunctions, } from './../index'; export default class LayoutLogicFunctions { public static fillFirstSpareBox( newContainedItem: ProductViewItemInterface, layoutBoxes: LayoutBoxInterface[], productViewDimensions: DimensionsInterface, ) { const layoutBoxToFill = this._getFirstBoxThatNeedsFilling( newContainedItem, layoutBoxes, ); if (layoutBoxToFill) { this._fillLayoutBox( newContainedItem, layoutBoxToFill, productViewDimensions, ); return true; } return false; } private static _fillLayoutBox( newContainedItem: ProductViewItemInterface, layoutBox: LayoutBoxInterface, productViewDimenions: DimensionsInterface, ): LayoutBoxInterface { if (ProductViewItemModel.isText(newContainedItem)) { layoutBox.containedItem = newContainedItem; } else { layoutBox.containedItem = ImageTransformFunctions .setInitialImageTransforms( ImageTransformFunctions.getLayoutBoxDimensions( productViewDimenions, layoutBox, ), newContainedItem as ProductViewImageInterface, ); } return layoutBox; } private static _getFirstBoxThatNeedsFilling( newContainedItem: ProductViewItemInterface, layoutBoxes: LayoutBoxInterface[], ): LayoutBoxInterface { const newContainedItemIsText = ProductViewItemModel.isText(newContainedItem); for (const layoutBoxToFill of layoutBoxes) { if ( ( LayoutBoxModel.isTextBox(layoutBoxToFill) && newContainedItemIsText ) || ( LayoutBoxModel.needsPicture(layoutBoxToFill) && !newContainedItemIsText ) ) { return layoutBoxToFill; } } return null; } }