contributte / forms-multiplier

:repeat: Form multiplier & replicator for Nette Framework
https://contributte.org/packages/contributte/forms-multiplier.html
MIT License
26 stars 21 forks source link

Problem with container removing after in 3.0.5 #39

Closed BigOHenry closed 5 years ago

BigOHenry commented 5 years ago

Hello, i have got problem with container removing in 3.0.5 (3.0.4 works fine).

remove button definition in form component:

$groups->addRemoveButton('', function (Nette\Forms\Controls\SubmitButton $submitter) use ($presenter, $groupObject) {
                                $submitter->setHtmlAttribute('class','btn-danger btn-sm fas fa-minus ajax');
                                $submitter->setHtmlAttribute('data-toggle', 'confirmation');
                                $submitter->setHtmlAttribute('data-title', 'Odstranit?');
                                $submitter->setHtmlAttribute('data-btn-ok-label', 'Ano');
                                $submitter->setHtmlAttribute('data-btn-ok-class', 'btn btn-success btn-sm');
                                $submitter->setHtmlAttribute('data-btn-cancel-label', 'Ne');
                                $submitter->setHtmlAttribute('data-btn-cancel-class', 'btn btn-danger btn-sm');
                                $submitter->setOption('group', $groupObject->getType());
                                $submitter->onClick[] = function () use ($presenter) {
                                    /** @var \Nette\Application\UI\Presenter $presenter */
                                    $presenter->redrawControl('segmentForm');
                                };
                            });

                            $signalName = $this->getUniqueId() . '-' . $name . '-' . $groups->getName();
                            if (is_array($this->getPresenter()->getSignal()) && $this->getPresenter()->getSignal()[1] === 'load' && preg_match('#' . $signalName . '-([0-9]+)#', $this->getPresenter()->getSignal()[0], $matches)) {
                                $groups->addCopy($matches[1]);
                            }

component form template:

{snippet segmentForm}
    {form segmentForm}
          // some logic for render
    {/form}
{/snippet}

Problem is snippet segmentForm is not refreshed.

Thank you for check.

MartkCz commented 5 years ago

If you replace

if ($resolver->isRemoveAction() && $this->totalCopies >= $this->minCopies && !$resolver->reachedMinLimit()) {
            $this->resetFormEvents();
        }

with

if ($resolver->isRemoveAction() && $this->totalCopies >= $this->minCopies && !$resolver->reachedMinLimit()) {
            $container = $this->addCopy($resolver->getRemoveId());
            $container->getComponent(self::SUBMIT_REMOVE_NAME)->onClick[] = function () use ($container) {
                $this->removeAllComponents($container);
                $this->removeComponent($container);
            };
            $this->resetFormEvents();
        }

everything is alright?

BigOHenry commented 5 years ago

Where should i replace it? In my code is nothing like this and at vendor same.

MartkCz commented 5 years ago

in dev-master version you can try this:

$multiplier->onRemove[] = function () use ($presenter) {
                                    /** @var \Nette\Application\UI\Presenter $presenter */
                                    $presenter->redrawControl('segmentForm');
}
BigOHenry commented 5 years ago

with "webchemistry/forms-multiplier": "@dev", and your code getting this error: Cannot read an undeclared property WebChemistry\Forms\Controls\Multiplier::$onRemove.

 $groups->onRemove[] = function () use ($presenter) {
                        /** @var \Nette\Application\UI\Presenter $presenter */
                        $presenter->redrawControl('segmentForm');
                    };
MartkCz commented 5 years ago

It's now contributte/forms-multiplier:dev-master

BigOHenry commented 5 years ago
 Problem 1
    - Installation request for contributte/forms-multiplier dev-master -> satisfiable by contributte/forms-multiplier[dev-master].
    - contributte/forms-multiplier dev-master requires nette/forms ^3.0 -> satisfiable by nette/forms[3.0.x-dev, v3.0.0-RC1, v3.0.0-RC2, v3.0.0-alpha1, v3.0.0-beta] but these conflict with your requirements or minimum-stability.

I cant test this then. We will upgrade nette to 3.0 after final release. So i am stuck for 3.0.4. But its fine, its working :-)

BigOHenry commented 5 years ago

I finally tested the Nette 3 and dev version of forms-multiplier. Looks like this issue is fixed :-) Thank you!