File: D:/HostingSpaces/SBogers95/rentman.io/app/Komma/Dynamic/ComponentType/ComponentTypeFactory.php
<?php
namespace App\Komma\Dynamic\ComponentType;
use App\Komma\Dynamic\ComponentType\Types\AbstractComponentType;
use App\Komma\Dynamic\ComponentType\Types\AccordionFixedImage;
use App\Komma\Dynamic\ComponentType\Types\AccordionTextarea;
use App\Komma\Dynamic\ComponentType\Types\ArticleButtons;
use App\Komma\Dynamic\ComponentType\Types\AwardBadges;
use App\Komma\Dynamic\ComponentType\Types\Capterra;
use App\Komma\Dynamic\ComponentType\Types\Cards;
use App\Komma\Dynamic\ComponentType\Types\CardsSlider;
use App\Komma\Dynamic\ComponentType\Types\CareersJobDescription;
use App\Komma\Dynamic\ComponentType\Types\CareersJobRequirements;
use App\Komma\Dynamic\ComponentType\Types\CarouselImages;
use App\Komma\Dynamic\ComponentType\Types\CustomerLogos;
use App\Komma\Dynamic\ComponentType\Types\CustomerLogosByCountry;
use App\Komma\Dynamic\ComponentType\Types\CustomerStorySlider;
use App\Komma\Dynamic\ComponentType\Types\CustomerStoryTabs;
use App\Komma\Dynamic\ComponentType\Types\DataSecurity;
use App\Komma\Dynamic\ComponentType\Types\DoubleText;
use App\Komma\Dynamic\ComponentType\Types\Faq;
use App\Komma\Dynamic\ComponentType\Types\Heading;
use App\Komma\Dynamic\ComponentType\Types\HeadingContent;
use App\Komma\Dynamic\ComponentType\Types\Image;
use App\Komma\Dynamic\ComponentType\Types\ImageTextSteps;
use App\Komma\Dynamic\ComponentType\Types\Integrations;
use App\Komma\Dynamic\ComponentType\Types\ProductTable;
use App\Komma\Dynamic\ComponentType\Types\Quote;
use App\Komma\Dynamic\ComponentType\Types\Separator;
use App\Komma\Dynamic\ComponentType\Types\SideNavSlider;
use App\Komma\Dynamic\ComponentType\Types\StorySlider;
use App\Komma\Dynamic\ComponentType\Types\Table;
use App\Komma\Dynamic\ComponentType\Types\Text;
use App\Komma\Dynamic\ComponentType\Types\TextImage;
use App\Komma\Dynamic\ComponentType\Types\TextImageTabs;
use App\Komma\Dynamic\ComponentType\Types\Tiles;
use App\Komma\Dynamic\ComponentType\Types\TopNavSlider;
use App\Komma\Dynamic\ComponentType\Types\Usp;
use App\Komma\Dynamic\ComponentType\Types\Video;
use Illuminate\Support\Collection;
/**
* Class ComponentTypeFactory
*
* Knows how to create component types by passing it an ComponentTypes enum.
*
* WARNING! The Factory only can create one instance of a componentType per request.
* If you make componentTypes more then once in a request, you will get the same componentType.
* This is because they must have unique attribute keys.
*/
class ComponentTypeFactory
{
private static $maked = [];
/**
* Make componentTypes
*
* @param int $componentTypeId
* @return AbstractComponentType|Collection
* @throws \ReflectionException
*/
public static function make(int $componentTypeId = null)
{
if ($componentTypeId === null) {
$componentTypes = new Collection();
foreach (ComponentTypes::getAsArray() as $componentTypeId) {
if ($componentTypeId === 0) {
continue;
}
$componentTypes->push(self::makeSpecificType($componentTypeId));
}
$componentTypes = $componentTypes->filter(function ($type) {
return ! is_null($type);
});
$componentTypes = $componentTypes->keyBy(function (AbstractComponentType $componentType) {
return $componentType->getId();
});
return $componentTypes;
} else {
return self::makeSpecificType($componentTypeId);
}
}
/**
* @param $componentTypeId
* @return Heading|TextImage
*/
private static function makeSpecificType($componentTypeId)
{
if (in_array($componentTypeId, array_keys(self::$maked), true)) {
return self::$maked[$componentTypeId];
}
switch ($componentTypeId) {
case ComponentTypes::HEADING:
self::$maked[$componentTypeId] = new Heading();
break;
case ComponentTypes::TEXT_IMAGE:
self::$maked[$componentTypeId] = new TextImage();
break;
case ComponentTypes::DOUBLE_TEXT:
self::$maked[$componentTypeId] = new DoubleText();
break;
case ComponentTypes::QUOTE:
self::$maked[$componentTypeId] = new Quote();
break;
case ComponentTypes::VIDEO:
self::$maked[$componentTypeId] = new Video();
break;
case ComponentTypes::CARDS:
self::$maked[$componentTypeId] = new Cards();
break;
case ComponentTypes::ACCORDION_FIXED_IMAGE:
self::$maked[$componentTypeId] = new AccordionFixedImage();
break;
case ComponentTypes::CAPTERRA:
self::$maked[$componentTypeId] = new Capterra();
break;
case ComponentTypes::IMAGE:
self::$maked[$componentTypeId] = new Image();
break;
case ComponentTypes::TEXT:
self::$maked[$componentTypeId] = new Text();
break;
case ComponentTypes::DATA_SECURITY:
self::$maked[$componentTypeId] = new DataSecurity();
break;
case ComponentTypes::PRODUCT_TABLE:
self::$maked[$componentTypeId] = new ProductTable();
break;
case ComponentTypes::CUSTOMER_STORY_TABS:
self::$maked[$componentTypeId] = new CustomerStoryTabs();
break;
case ComponentTypes::ACCORDION_TEXTAREA:
self::$maked[$componentTypeId] = new AccordionTextarea();
break;
case ComponentTypes::IMAGE_TEXT_STEPS:
self::$maked[$componentTypeId] = new ImageTextSteps();
break;
case ComponentTypes::SEPARATOR:
self::$maked[$componentTypeId] = new Separator();
break;
case ComponentTypes::USP:
self::$maked[$componentTypeId] = new Usp();
break;
case ComponentTypes::CUSTOMER_STORY_SLIDER:
self::$maked[$componentTypeId] = new CustomerStorySlider();
break;
case ComponentTypes::CUSTOMER_LOGOS:
self::$maked[$componentTypeId] = new CustomerLogos();
break;
case ComponentTypes::CUSTOMER_LOGOS_BY_COUNTRY:
self::$maked[$componentTypeId] = new CustomerLogosByCountry();
break;
case ComponentTypes::STORY_SLIDER:
self::$maked[$componentTypeId] = new StorySlider();
break;
case ComponentTypes::CAROUSEL_IMAGES:
self::$maked[$componentTypeId] = new CarouselImages();
break;
case ComponentTypes::HEADING_CONTENT:
self::$maked[$componentTypeId] = new HeadingContent();
break;
case ComponentTypes::CAREERS_JOB_DESCRIPTION:
self::$maked[$componentTypeId] = new CareersJobDescription();
break;
case ComponentTypes::CAREERS_JOB_REQUIREMENTS:
self::$maked[$componentTypeId] = new CareersJobRequirements();
break;
case ComponentTypes::INTEGRATIONS:
self::$maked[$componentTypeId] = new Integrations();
break;
case ComponentTypes::TEXT_IMAGE_TABS:
self::$maked[$componentTypeId] = new TextImageTabs();
break;
case ComponentTypes::AWARD_BADGES:
self::$maked[$componentTypeId] = new AwardBadges();
break;
case ComponentTypes::TABLE:
self::$maked[$componentTypeId] = new Table();
break;
case ComponentTypes::TILES:
self::$maked[$componentTypeId] = new Tiles();
break;
case ComponentTypes::CARDSSLIDER:
self::$maked[$componentTypeId] = new CardsSlider();
break;
case ComponentTypes::SIDENAV_SLIDER:
self::$maked[$componentTypeId] = new SideNavSlider();
break;
case ComponentTypes::TOPNAV_SLIDER:
self::$maked[$componentTypeId] = new TopNavSlider();
break;
case ComponentTypes::FAQ:
self::$maked[$componentTypeId] = new Faq();
break;
case ComponentTypes::ARTICLE_BUTTONS:
self::$maked[$componentTypeId] = new ArticleButtons();
break;
default:
throw new \RuntimeException('Type "'.$componentTypeId.'" not makable since it is unknown');
}
return self::$maked[$componentTypeId];
}
}