collections

This commit is contained in:
Benjamin Dalsass
2025-12-03 17:47:22 +01:00
parent b1129f19d7
commit 4620710f5a
8 changed files with 60 additions and 40 deletions

View File

@@ -184,6 +184,7 @@ class iTopWebPage extends NiceWebPage implements iTabbedPage
$this->LinkScriptFromAppRoot('node_modules/tom-select/dist/js/tom-select.complete.min.js');
$this->LinkScriptFromAppRoot('js/forms/custom-elements/choices.js');
$this->LinkScriptFromAppRoot('js/forms/custom-elements/oql.js');
$this->LinkScriptFromAppRoot('js/forms/custom-elements/collection.js');
// Used by inline image, CKEditor and other places
$this->LinkScriptFromAppRoot('node_modules/magnific-popup/dist/jquery.magnific-popup.min.js');

View File

@@ -16,6 +16,7 @@ use Combodo\iTop\Forms\IO\FormOutput;
use Combodo\iTop\Forms\Register\IORegister;
use Combodo\iTop\Forms\Register\OptionsRegister;
use Combodo\iTop\Forms\Register\RegisterException;
use Combodo\iTop\Forms\Block\Base\CollectionBlock;
/**
* Abstract form block.
@@ -25,8 +26,8 @@ use Combodo\iTop\Forms\Register\RegisterException;
*/
abstract class AbstractFormBlock implements IFormBlock
{
/** @var null|FormBlock */
private ?FormBlock $oParent = null;
/** @var null|FormBlock|CollectionBlock */
private FormBlock|CollectionBlock|null $oParent = null;
/** @var OptionsRegister */
private OptionsRegister $oOptionsRegister;
@@ -42,14 +43,14 @@ abstract class AbstractFormBlock implements IFormBlock
*/
public function __construct(private readonly string $sName, array $aOptions = [])
{
// Register IO
$this->RegisterIO($this->oIORegister = new IORegister($this));
$this->AfterIORegistered($this->oIORegister);
// Register options
$this->RegisterOptions($this->oOptionsRegister = new OptionsRegister());
$this->SetOptions($aOptions);
$this->AfterOptionsRegistered($this->oOptionsRegister);
// Register IO
$this->RegisterIO($this->oIORegister = new IORegister($this));
$this->AfterIORegistered($this->oIORegister);
}
/**
@@ -65,11 +66,11 @@ abstract class AbstractFormBlock implements IFormBlock
/**
* Set the parent block.
*
* @param FormBlock $oParent
* @param FormBlock|CollectionBlock $oParent
*
* @return void
*/
public function SetParent(FormBlock $oParent): void
public function SetParent(FormBlock|CollectionBlock $oParent): void
{
$this->oParent = $oParent;
}
@@ -77,9 +78,9 @@ abstract class AbstractFormBlock implements IFormBlock
/**
* Get the parent block.
*
* @return FormBlock|null
* @return FormBlock|CollectionBlock|null
*/
public function GetParent(): ?FormBlock
public function GetParent(): FormBlock|CollectionBlock|null
{
return $this->oParent;
}

View File

@@ -25,9 +25,6 @@ class CollectionBlock extends AbstractTypeFormBlock
// Inputs
public const INPUT_CLASS_NAME = 'input_class_name';
/** @var FormBlock block */
protected AbstractTypeFormBlock $oPrototypeBlock;
/** @inheritdoc */
public function GetFormType(): string
{
@@ -56,15 +53,12 @@ class CollectionBlock extends AbstractTypeFormBlock
{
parent::RegisterOptions($oOptionsRegister);
$oOptionsRegister->SetOption('entry_block', null, false);
$oOptionsRegister->SetOption('prototype', true);
$oOptionsRegister->SetOption('allow_add', true);
$oOptionsRegister->SetOption('prototype_options', [
'label' => false,
]);
// not type options
$oOptionsRegister->SetOption('block_entry_type', FormBlock::class, false);
$oOptionsRegister->SetOption('block_entry_options', [], false);
}
/** @inheritdoc */
@@ -72,13 +66,11 @@ class CollectionBlock extends AbstractTypeFormBlock
{
parent::AfterOptionsRegistered($oOptionsRegister);
$sBlockEntryType = $this->GetOption('block_entry_type');
$sBlockEntryOptions = $this->GetOption('block_entry_options');
$this->oPrototypeBlock = new ($sBlockEntryType)('prototype', $sBlockEntryOptions);
$oBlockEntryType = $this->GetOption('entry_block');
try {
$oOptionsRegister->SetOption('entry_type', $this->oPrototypeBlock->GetFormType());
$oOptionsRegister->SetOption('entry_options', $this->oPrototypeBlock->GetOptions());
$oOptionsRegister->SetOption('entry_type', $oBlockEntryType->GetFormType());
$oOptionsRegister->SetOption('entry_options', $oBlockEntryType->GetOptions());
} catch (RegisterException $e) {
}