<?php
namespace Maknz\Slack\BlockElement;
use InvalidArgumentException;
use Maknz\Slack\Object\Option;
class RadioButtons extends Options
{
protected $type = 'radio_buttons';
protected $hasInitialOption = false;
protected static $availableAttributes = [
'action_id' => 'action_id',
'options' => 'options',
'confirm' => 'confirm',
];
public function getInitialOption()
{
foreach ($this->getOptions() as $option) {
if ($option->isInitiallySelected()) {
return $option;
}
}
return null;
}
public function addOption($option)
{
if ((is_array($option) && ! empty($option['selected']))
|| ($option instanceof Option && ! $option->isInitiallySelected())
) {
if ($this->hasInitialOption) {
throw new InvalidArgumentException('Only one option can be initially selected');
}
$this->hasInitialOption = true;
}
return parent::addOption($option);
}
public function clearOptions()
{
$this->hasInitialOption = false;
return parent::clearOptions();
}
public function toArray()
{
$data = [
'type' => $this->getType(),
'action_id' => $this->getActionId(),
'options' => $this->getOptionsAsArrays(),
];
if ($this->hasInitialOption) {
$initialOption = $this->getInitialOption();
if ($initialOption !== null) {
$data['initial_option'] = $initialOption->toArray();
}
}
$confirm = $this->getConfirm();
if ($confirm !== null) {
$data['confirm'] = $confirm->toArray();
}
return $data;
}
}