File: D:/HostingSpaces/SBogers10/reiskick.komma.nl/app/Components/Types/Steps.php
<?php
namespace App\Components\Types;
use App\Components\ComponentTypes;
use App\Components\HasSpacingTrait;
use Komma\KMS\Components\Component\ViewComponent;
use Komma\KMS\Components\ComponentType\Types\AbstractComponentType;
use Komma\KMS\Core\Attributes\Models\SelectOption;
use Komma\KMS\Core\Attributes\Select;
use Komma\KMS\Core\Attributes\Seperator;
use Komma\KMS\Core\Attributes\TextArea;
use Komma\KMS\Core\Attributes\TextField;
use Komma\KMS\Core\Attributes\Title;
class Steps extends AbstractComponentType
{
use HasSpacingTrait;
protected int $id = ComponentTypes::STEPS;
protected string $name = 'steps';
// Number of tabs that can be filled
const POSSIBLE_AMOUNT = 5;
public function defineAttributesAndTabs()
{
$iconOptions = [
((new SelectOption())
->setValue('airport')
->setContent('Vliegtuig')
->setHtmlContent('Vliegtuig')),
((new SelectOption())
->setValue('camera')
->setContent('Camera')
->setHtmlContent('Camera')),
((new SelectOption())
->setValue('map')
->setContent('Kaart')
->setHtmlContent('Kaart')),
((new SelectOption())
->setValue('suitcase')
->setContent('Koffer')
->setHtmlContent('Koffer')),
((new SelectOption())
->setValue('wallet')
->setContent('Portemonnee')
->setHtmlContent('Portemonnee')),
];
$this->addItems([
(new TextField())
->setReference('title')
->setLabelText(__('KMS::attributes/components.title'))
]);
$this->addItems($this->getSpacingFields());
$this->addItems([
(new Seperator()),
(new Title())
->setLabelText('Stappen')
]);
// Make the tabs
for($i = 0; $i < self::POSSIBLE_AMOUNT; $i++) {
$this->addItems([
(new Select())
->setReference('icon_' . ($i + 1))
->setLabelText('Icoon')
->setItems($iconOptions)
->setDataAttribute('tab', ($i + 1)),
(new TextField())
->setReference('label_' . ($i + 1))
->setLabelText(__('KMS::attributes/components.title'))
->setDataAttribute('tab', ($i + 1)),
(new TextArea())
->setReference('text_' . ($i + 1))
->enableTinymceEditor()
->setDefaultHeight(120)
->setLabelText(__('KMS::attributes/components.text'))
->setDataAttribute('tab', ($i + 1))
]);
}
}
public function prepare(ViewComponent $viewComponent)
{
$tabs = collect();
for($i = 1; $i <= self::POSSIBLE_AMOUNT; $i++) {
$icon = $viewComponent->{'icon_'.$i};
$label = $viewComponent->{'label_'.$i};
$text = $viewComponent->{'text_'.$i};
if(!empty($label) || !empty($text)) {
$tab = (object)[
'id' => $i,
'icon' => $icon,
'label' => $label,
'text' => $text,
];
$tabs->push($tab);
}
unset($viewComponent->{'icon_'.$i});
unset($viewComponent->{'label_'.$i});
unset($viewComponent->{'text_'.$i});
}
$viewComponent->steps = $tabs;
}
}