<?php
namespace App\Forms;
use NasExt\Forms\DependentData;
use Nette;
use Nette\Application\UI\Control;
use Nette\Application\UI\Form;
use WebChemistry\Forms\Controls\Submitter;
/**
* Class MultiplierDependentFormControl
* @package App\Forms
*/
class MultiplierDependentFormControl extends Control {
public $onSave = array();
/**
* MultiplierDependentFormControl constructor.
*/
public function __construct() {
parent::__construct();
}
/**
*
*/
protected function beforeRender() {
parent::beforeRender();
if($this->isAjax()) $this->template->getLatte()->addProvider('formsStack', [$this['multiplierDependentForm']]);
}
/**
*
*/
public function render() {
$this['multiplierDependentForm']->render();
//$this->template->setFile(__DIR__ . '/multiplierDependentForm.latte');
//$this->template->render();
}
/**
* @return Form
*/
public function createComponentMultiplierDependentForm() {
$form = new Form;
$copies = 1;
$maxCopies = 10;
$array = array(
1 => 'jedna',
2 => 'dva',
3 => 'tři',
);
$lookup_data = array(
1 => array (
1 => '1/1',
2 => '1/2',
3 => '1/3',
),
2 => array (
1 => '2/1',
2 => '2/2',
3 => '2/3',
),
3 => array (
1 => '3/1',
2 => '3/2',
3 => '3/3',
),
);
$multiplier = $form->addMultiplier('multiplier', function (Nette\Forms\Container $container, Nette\Forms\Form $form) use ($array, $lookup_data) {
$container->addSelect('array', 'Array', $array)
->setPrompt('--- Select ---');
$container->addDependentSelectBox('dependent_select', 'Dependent select:', $container['array'])
->setDependentCallback(function ($values) use ($array, $lookup_data) {
$data = new DependentData;
if ($values['array']) {
$data->setItems($lookup_data[$values['array']])->setPrompt('---');
} else {
$data->setItems(array())->setPrompt('---');
}
return $data;
})
->setPrompt('--- Select array first ---');
}, $copies, $maxCopies);
$presenter = $this;
$multiplier->addCreateButton('+', 1, function (Submitter $submitter) use ($presenter) {
//$submitter->setHtmlAttribute('class', 'ajax');
$submitter->onClick[] = function () use ($presenter) {
/** @var \Nette\Application\UI\Presenter $presenter */
$presenter->redrawControl('multiplierDependentForm');
};
});
$multiplier->addRemoveButton('-', function (Nette\Forms\Controls\SubmitButton $submitter) use ($presenter) {
//$submitter->setHtmlAttribute('class', 'ajax');
$submitter->onClick[] = function () use ($presenter) {
/** @var \Nette\Application\UI\Presenter $presenter */
$presenter->redrawControl('multiplierDependentForm');
};
});
$form->addProtection('Error, try again!');
$form->addSubmit('save', 'Uložit')
->setAttribute('class', 'btn-primary')
->setAttribute('id','submit')
->onClick[] = array($this, 'formSucceeded');
return $form;
}
/**
* @param $form
* @param $values
*/
public function formSucceeded($form, $values) {
$this->onSave();
}
}//class
/**
* Interface IMultiplierDependentFormControl
* @package App\Forms
*/
interface IMultiplierDependentFormControl {
/**
* @return MultiplierDependentFormControl
*/
public function create();
}