Add block renderers to DI container

[MAILPOET-2665]
This commit is contained in:
Rostislav Wolny
2020-01-29 17:05:36 +01:00
committed by Jack Kitterhing
parent d9b9e13a04
commit 6827eb93e6
14 changed files with 169 additions and 85 deletions

View File

@@ -2,48 +2,113 @@
namespace MailPoet\Form;
use MailPoet\Form\Block\Checkbox;
use MailPoet\Form\Block\Date;
use MailPoet\Form\Block\Divider;
use MailPoet\Form\Block\Html;
use MailPoet\Form\Block\Radio;
use MailPoet\Form\Block\Segment;
use MailPoet\Form\Block\Select;
use MailPoet\Form\Block\Submit;
use MailPoet\Form\Block\Text;
use MailPoet\Form\Block\Textarea;
class BlocksRenderer {
/** @var Checkbox */
private $checkbox;
/** @var Date */
private $date;
/** @var Divider */
private $divider;
/** @var Html */
private $html;
/** @var Radio */
private $radio;
/** @var Segment */
private $segment;
/** @var Select */
private $select;
/** @var Submit */
private $submit;
/** @var Text */
private $text;
/** @var Textarea */
private $textarea;
public function __construct(
Checkbox $checkbox,
Date $date,
Divider $divider,
Html $html,
Radio $radio,
Segment $segment,
Select $select,
Submit $submit,
Text $text,
Textarea $textarea
) {
$this->checkbox = $checkbox;
$this->date = $date;
$this->divider = $divider;
$this->html = $html;
$this->radio = $radio;
$this->segment = $segment;
$this->select = $select;
$this->submit = $submit;
$this->text = $text;
$this->textarea = $textarea;
}
public function renderBlock(array $block = []): string {
$html = '';
switch ($block['type']) {
case 'html':
$html .= Block\Html::render($block);
$html .= $this->html->render($block);
break;
case 'divider':
$html .= Block\Divider::render();
$html .= $this->divider->render();
break;
case 'checkbox':
$html .= Block\Checkbox::render($block);
$html .= $this->checkbox->render($block);
break;
case 'radio':
$html .= Block\Radio::render($block);
$html .= $this->radio->render($block);
break;
case 'segment':
$html .= Block\Segment::render($block);
$html .= $this->segment->render($block);
break;
case 'date':
$html .= Block\Date::render($block);
$html .= $this->date->render($block);
break;
case 'select':
$html .= Block\Select::render($block);
$html .= $this->select->render($block);
break;
case 'text':
$html .= Block\Text::render($block);
$html .= $this->text->render($block);
break;
case 'textarea':
$html .= Block\Textarea::render($block);
$html .= $this->textarea->render($block);
break;
case 'submit':
$html .= Block\Submit::render($block);
$html .= $this->submit->render($block);
break;
}
return $html;