ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid

cujan
Člen | 410
+
0
-

Pavel Janda napsal(a):

@cujan A ukážeš metodu NavstevaManager::getRecords() :)

@PavelJanda

<?php
namespace App\Model;

use Nette;


class NavstevaManager extends BaseManager {
    const
	TABLE_NAME = 'navsteva';

    public function getRecords()
    {
	return $this->database->table(self::TABLE_NAME);
    }
}
?>
jikki
Člen | 73
+
0
-

jikki napsal(a):

Ahoj, takto mám udělaný TreeView. Zobrazují se mi šipky na rozbalení u všech položek, i vnořených, i když položka nemá žádného potomka. Poradíte někdo co mám špatně prosím?

<?php
    public function createComponentTreeStructure()
    {
        $grid = $this->myTreeViewFactory->create();
        $stock = $this->wh->em->find(Entity\Stock::class, 1);

        $qb = $this->wh->em->createQueryBuilder();
        $qb->select('e')
            ->from('\App\Model\Entity\Stock', 'e')
            ->where('e.parent = :stock')
            ->setParameter('stock', $stock->id)
            ;
        $qb->getQuery()->getResult();
        $grid['grid']->setDataSource($qb);
        $grid['grid']->setTreeView(function ($parent)
        {
            $qb = $this->wh->em->createQueryBuilder();
            $qb->select('e')
                ->from('\App\Model\Entity\Stock', 'e')
                ->where('e.parent = :parent')
                ->setParameter('parent', $parent)
                ;
            return $qb->getQuery()->getResult();
        }, 'id');

        $grid['grid']->addColumnText('stockName', 'Název umístění');
        $grid['grid']->addColumnText('parent.stockName', 'Nadřazené umístění');
        $grid['grid']->addColumnNumber('id', 'Id');

        $grid['grid']->setPagination(false);

        return $grid;
    }
?>

díky moc

Poradí pls někdo? díky

jikki
Člen | 73
+
0
-

Ahoj,

v tabulce mám přidanou groupAction, ale ten select se mi roztahuje přes celou šírku tabulky, další select závislý na tom prvním se přidá pod něj také roztažený. Vše mám v defaultu, neměnil jsem žádné styly. Poradí prosím někdo jak dosáhnout toho aby byly vedle sebe neroztažené?

Editoval jikki (26. 10. 2018 12:21)

Jurix
Člen | 11
+
0
-

jikki napsal(a):

Ahoj,

v tabulce mám přidanou groupAction, ale ten select se mi roztahuje přes celou šírku tabulky, další select závislý na tom prvním se přidá pod něj také roztažený. Vše mám v defaultu, neměnil jsem žádné styly. Poradí prosím někdo jak dosáhnout toho aby byly vedle sebe neroztažené?

Nejjednodušší asi bude do CSS přidat direktivu. Něco takového…
.row-group-adtions th select { width: 250px; }

Petr Parolek
Člen | 455
+
0
-

Ahoj, teď jsem narazil na nefunkční AggregationFunction, funkce se vykoná (zkoušeno dumpem ve třídě Ublaboo\DataGrid\AggregationFunction\FunctionSum), ale nevyrenderuje se do datagridu.

Vytvořil jsem testovací sandbox aplikaci na https://github.com/…tion-sandbox .

Mohli byste se na to prosím hoši kouknout, kde se co pokazilo?

Editoval ppar (26. 10. 2018 22:32)

Petr Parolek
Člen | 455
+
0
-

Nakonec jsem se na to kouknul a poslal jsem PR https://github.com/…rid/pull/718 . Mohl bys @Felix nebo @PavelJanda prosím PR začlenit?

EDIT

Objevil jsem druhou chybu v AggregationFunction při stránkování výsledků, opravu jsem zahrnul do výše uvedeného PR.

Editoval ppar (27. 10. 2018 13:37)

cujan
Člen | 410
+
0
-

@PavelJanda
vieme v com je problem v tom datovom type TIME? ci musim skoncit s gridom…
vdaka

cujan napsal(a):

Pavel Janda napsal(a):

@cujan A ukážeš metodu NavstevaManager::getRecords() :)

@PavelJanda

<?php
namespace App\Model;

use Nette;


class NavstevaManager extends BaseManager {
    const
	TABLE_NAME = 'navsteva';

    public function getRecords()
    {
	return $this->database->table(self::TABLE_NAME);
    }
}
?>
Pavel Janda
Člen | 977
+
0
-

@jikki Ty šipičky se zobrazují s ohledem na property has_children, jméno té property lze změnit druhým argumentem metody ::setTreeView(). Zkus si v té entitě implementovat jinou property/metodu, která bude správně vracet info o tom, zda má položka další potomky.

@cujan
1, Můžeš to zkusit vyrenderovat ručně (přes callback nebbo šablonu)
2, Můžeš poslat celou chybovou hlášku? Případně najít místo, kde to s nette database table drhne a poslat PR?

jikki
Člen | 73
+
0
-

@PavelJanda

@jikki Ty šipičky se zobrazují s ohledem na property has_children, jméno té property lze změnit druhým argumentem metody ::setTreeView(). Zkus si v té entitě implementovat jinou property/metodu, která bude správně vracet info o tom, zda má položka další potomky.

Zjistil jsem že položky, které by neměly mít šipku mají nastavenou classu hidden, ale šipečka se stejně zobrazuje.

<a data-toggle-tree="true" href="/wh/www/manage/places?treeStructure-grid-parent=6&amp;do=treeStructure-grid-getChildren" class="hidden chevron ajax"><i class="fa fa-chevron-right"></i></a>

Zjistil jsem že css a js stažené přes bower, konktrétně datagrid.css neobsahuje tu třídu hidden. Když jsem použil stejný soubor, který máš ve \vendor\ublaboo\datagrid\assets\dist\ tak to funguje. Konečně, jupíí :) díky moc.

EDIT: tak neměl jsem aktualizované css a js přes bower. Po aktualizaci zmizly i další problémy. Např. group action je teď inline, atd.

Editoval jikki (30. 10. 2018 21:32)

NetteStudent
Člen | 2
+
0
-

Prosim Vas, je mozne ikonky z casti action usporiadat inac ? Ako to urobim?

http://imgbox.com/U2Rpv07Q

Pavel Kravčík
Člen | 1180
+
0
-

@NetteStudent: Zkoušel si je napsat v jiném pořadí? :)

jikki
Člen | 73
+
0
-

Ahojte, měl bych 2 dotazy:

  • nabízí ublaboo možnost načíst tabulku se zaškrtnutými řádky pro group action? Případně jak zaškrtnout řádky po kliknutí např. na tlačítko v toolbaru?
  • lze do ItemsDetail dát nějak jiná ublaboo tabulka či vlastní komponenta?

Díky moc

Editoval jikki (1. 11. 2018 14:17)

sevca79
Člen | 55
+
0
-

Ahoj,
prosím právě sem u mého cca rok starého projektu udělal composer update a bower update a najednou se mi u gridu přestaly správně zobrazovat filterMultiSelect… funkčně je vše jak má, ale nezobrazuje se to co sem vybral v tom vybíracím buttonku, ale zobrazí se tam pouze caret bez žádného textu…text se mi zobrazí jen když nad to najedu myší, tak se mi to zobrazí jako plovoucí nápověda
Nesetkal se někdo s podobným problémem u filter selectů???
Případně nějaký nápad kde by mohl být nějaký problém..
díky za každou radu.. ;)

Ondřej Kubíček
Člen | 494
+
0
-

tak jestli jsi udělal update, podíval bych se jaký je rozdíl mezi tvou puvodní rok starou verzí a současnou verzí, třeba se něco změnilo a budeš si to muset upravit

cujan
Člen | 410
+
0
-

Pavel Janda napsal(a):

@jikki Ty šipičky se zobrazují s ohledem na property has_children, jméno té property lze změnit druhým argumentem metody ::setTreeView(). Zkus si v té entitě implementovat jinou property/metodu, která bude správně vracet info o tom, zda má položka další potomky.

@cujan
1, Můžeš to zkusit vyrenderovat ručně (přes callback nebbo šablonu)
2, Můžeš poslat celou chybovou hlášku? Případně najít místo, kde to s nette database table drhne a poslat PR?

@PavelJanda
Warning

DateTime::createFromFormat() expects parameter 2 to be string, object given

chyba je oznacena na riadku 76

<?php
Source file
File: ...\ublaboo\datagrid\src\Utils\DateTimeHelper.php:76

66:            }
67:
68:            if ($value instanceof \DateTimeImmutable) {
69:                $date = new \DateTime('now', $value->getTimezone());
70:                $date->setTimestamp($value->getTimestamp());
71:
72:                return $date;
73:            }
74:
75:            foreach ($formats as $format) {
76:                if (!is_string($format) || !$date = \DateTime::createFromFormat($format, $value)) {
77:                    continue;
78:                }
79:
80:                return $date;
?>

Editoval cujan (5. 11. 2018 13:31)

Pavel Janda
Člen | 977
+
0
-

@cujan Mohl bys zjistit, jaký objekt tam přijde? Tedy například dumpnout:

74: Tracy\Debugger::barDump($value);

Díky.

jikki
Člen | 73
+
0
-

@PavelJanda

Zkouším dělat Group Action, kde bude nejdříve vyžadován input select a následně input text. Ale zřejmě to nejde. Šlo by takovou možnost přidat?

díky moc

Editoval jikki (6. 11. 2018 7:52)

cujan
Člen | 410
+
0
-

Pavel Janda napsal(a):

@cujan Mohl bys zjistit, jaký objekt tam přijde? Tedy například dumpnout:

74: Tracy\Debugger::barDump($value);

Díky.

@PavelJanda
doplnil som

<?php
Warning

DateTime::createFromFormat() expects parameter 2 to be string, object given search► skip error►
Source file
File: ...\ublaboo\datagrid\src\Utils\DateTimeHelper.php:76

66:            }
67:
68:            if ($value instanceof \DateTimeImmutable) {
69:                $date = new \DateTime('now', $value->getTimezone());
70:                $date->setTimestamp($value->getTimestamp());
71:
72:                return $date;
73:            }
74:            \Tracy\Debugger::barDump($value);
75:            foreach ($formats as $format) {
76:                if (!is_string($format) || !$date = \DateTime::createFromFormat($format, $value)) {
77:                    continue;
78:                }
79:
80:                return $date;
?>
<?php
Dumps
DateInterval #0558
y => 0
m => 0
d => 0
h => 17
i => 0
s => 0
f => 0.0
weekday => 0
weekday_behavior => 0
first_last_day_of => 0
invert => 0
days => false
special_type => 0
special_amount => 0
have_weekday_relative => 0
have_special_relative => 0
?>

Editoval cujan (7. 11. 2018 11:40)

sevca79
Člen | 55
+
0
-

Nevím jestli byla chyba jen u mě, nebo to dělá problém více lidem, ale stále mi nefungoval ten filterMultiSelect, poté co sem updatovat všechny balíčky přes bower, tak se mi nezobrazovala hodnota v multiselectu. Nakonec sem problém vyřešil tím, že sem downgradoval balíček bootstrap-select na nižší verzi ..dal sem tam 1.12.0 a začlo to fungovat tak jak má.. (asi by to šlo i s jinou vyšší, ale nechce se mi to testovat)..ale s nejnovější verzí tuším 1.13.3 to fungovalo špatně
Prosím u ostatních je fiterMultiSelect s nejnovější verzí bootstrap-selectu bez problému??

Pavel Janda
Člen | 977
+
0
-

@jikki Určitě to jde. Mrkni na demo + kód dema hned pod ním: https://ublaboo.org/…group-action
Když vybereš Add note, ukáže se ti pak text input. :)

jikki
Člen | 73
+
0
-

Pavel Janda napsal(a):

@jikki Určitě to jde. Mrkni na demo + kód dema hned pod ním: https://ublaboo.org/…group-action
Když vybereš Add note, ukáže se ti pak text input. :)

add Note vím :) Ale je to jen polovina toho co bych potřeboval.
Potřeboval group action, která bude mít v sobě input select a následně input text, abych to mohl použít pro následující scénař:

V tabulce mám zobrazené typy položek a jejích dostupné množství. V group action vyberu např. akci ‚Přesun‘, pak potřebuji ať to nabídne select s výběrem umístění. Vyberu umístění a pak bych potřeboval ať nabídne text input pro zadání množství :)

NetteStudent
Člen | 2
+
0
-

Pavel Kravčík napsal(a):

@NetteStudent: Zkoušel si je napsat v jiném pořadí? :)

Jasne ze som skusal :)

Napriklad delete mam uplne posledne $grid->addAction(‚delete‘, '', ‚delete!‘) .. ale ako vidno na obrazku je predposledne …

Na poslednom mieste je inline edit $grid->addInlineEdit() .. ktore mam na prvom mieste

jikki
Člen | 73
+
0
-

Ahoj,

lze nějak nastavit, aby konkrétní řádky byly zaškrtnuty pro GroupdAction při načtení tabulky?
Případně, aby si tabulka pamatovala zaškrtnuté řádky při stránkování?

díky moc

Jurix
Člen | 11
+
0
-

jikki napsal(a):

Ahoj,

lze nějak nastavit, aby konkrétní řádky byly zaškrtnuty pro GroupdAction při načtení tabulky?
Případně, aby si tabulka pamatovala zaškrtnuté řádky při stránkování?

díky moc

Nad checkboxy bych volal onchange funkci, která AJAXem uloží ID zaškrtnutých řádků do session a následné zaškrtnutí po reloadu/pagination bych řešil JavaScriptem nějak takto: $('body').on('load', 'tvůj_checkbox_selector', function() { $(this).prop('checked', true); });

Editoval Jurix (25. 11. 2018 16:29)

Honza.Mottl
Člen | 104
+
0
-

Musis vyresit tyto veci:

  1. dostat sve zaskrtnuti ze serveru na klienta. Muzes udealt sablonu a nastavit class podle toho zda je zaskrtnute.
  2. osetri, aby pri se po doruceni snippetu gridu nastavily checkboxy
{define col-objednavka_id}
    <span {if $item->objednavka_checked}class="checked" {/if}>{$item->objednavka_id}</span>
{/define}
$.nette.ext('datagrid.handling', {
    success: function(payload) {
        var processCreate = false;
        var processResize = false;

            if (payload && payload.snippets) {
                Object.keys(payload.snippets).forEach(function(snippet,index) {
                    if ((snippet.indexOf('-table') !== -1) || (snippet.indexOf('-grid') !== -1)) {
                        processCreate = true;
                    } else if (snippet.indexOf('-tbody') !== -1) {
                        processResize = true;
                    }
                });
            }

            if (processCreate || processResize) {
                // nastavit checkbox. Kod je narychlo nastreleny
                $('td.col-objednavka_id span.checked').closest('tr').find('input[type="checkbox"]').prop('checked', true);
            }
        }
    });
jikki
Člen | 73
+
0
-

@Jurix @Honza.Mottl
Díky za tipy, zkusím to.

jAkErCZ
Člen | 321
+
0
-

Čau,
hele řeším takovou divnou věc…

Snažím se po přidání nového řádku datagrid překreslit abych nemusel znovu načítat stránku ale nějak to nefunguje--

$grid->getInlineAdd()->onSubmit[] = function($values) {
    $v='';foreach($values as $key=>$value){$v.="$key: $value, ";}$v=trim($v,', ');
    $this->touramentRepository->saveSchool(null,$values);
    $this->flashMessage("Škola byla úspěšně přidaná k turnaji.", 'success');
    $this['schoolGrid']->redrawControl();
    $this->redrawControl('flashMessages');
};

Dělám něco špatně? :O

Jurix
Člen | 11
+
0
-

Ahojte!

Po odeslání formuláře v detailu gridu se item překreslí a detail se tím zavře. Potřeboval bych tomu zabránit a nechat detail otevřený (samozřejmě při odeslání AJAXem).

Nedaří se mi vystopovat, v kterých místech k tomu překreslení dochází.
Tuší někdo?

díky!

Jurix
Člen | 11
+
0
-

jAkErCZ napsal(a):

Čau,
hele řeším takovou divnou věc…

Snažím se po přidání nového řádku datagrid překreslit abych nemusel znovu načítat stránku ale nějak to nefunguje--

$grid->getInlineAdd()->onSubmit[] = function($values) {
    $v='';foreach($values as $key=>$value){$v.="$key: $value, ";}$v=trim($v,', ');
    $this->touramentRepository->saveSchool(null,$values);
    $this->flashMessage("Škola byla úspěšně přidaná k turnaji.", 'success');
    $this['schoolGrid']->redrawControl();
    $this->redrawControl('flashMessages');
};

Dělám něco špatně? :O

ahoj,
zkus překreslit takto: $this['schoolGrid']->reload();

Editoval Jurix (7. 12. 2018 6:51)

cafesk8
Člen | 103
+
0
-

Zdravím,

mám naprosto jednoduchhý datagrid, který mi funguje dokud si zaráz nerozkliknu k editaci více řádků zaráz, jakmile dám edit na více řádků a pak na různých řádcích klikám buď save nebo cancel, tak se automaticky vykonávají odkonce namísto u konkrétního řádku.

		$grid = new DataGrid($this, $name);
		$grid->setDataSource($this->myRepository->findAll());
		$grid->addColumnText('input_price', 'Vstup')
			->setSortable()
			->setFilterText('input_price');
		$grid->addColumnText('output_price', 'Výstup')
			->setSortable()
			->setFilterText('output_price');

		$grid->addInlineEdit()
			->onControlAdd[] = function($container) {
				$container->addText('input_price', '');
				$container->addText('output_price', '');
			};

		$grid->getInlineEdit()->onSetDefaults[] = function($container, $item) {
			$container->setDefaults([
				'input_price' => $item->input_price,
				'output_price' => $item->output_price
			]);
		};

V js nemám nic jiného než:

<script>
	$(function () {
		$.nette.init();
	});
</script>

Pokud kliknu např. na editaci řádku č. 3, udělám změny a dám save anebo cancel, tak se správně překreslí ať již ze změnami nebo bez správně řádek č. 3.

Pokud ale otevřu (v tomto pořadí) řádek 1, 2 a nakonec 3 tak poté pokud dám save/cancel u řádku č. 1, provede se změna u řádku č. 3 a po opětovném kliknutí na edit/cancel na řádku č. 1 se provede/překreslí řádek č. 2 a až na třetí pokus se to provede u řádku č. 1.

Pokud si však v js dám:

<script>
	$.nette.ext('datagrid.handling', {
		success: function(payload) {
			console.log(payload);
		}
	});
</script>

Tak se mi do konzole vypíše správně ID upravovaných řádků.

Nevíte někdo co dělám špatně nebo čím by to mohlo být? Anebo prostě akorát ublaboo/datagrid neumí více big-editů zaráz?

Pro ujasnění přidávám screencast zde

jikki
Člen | 73
+
+1
-

@PavelJanda Byla tato issue nějak vyřešená prosím? Nenašel jsem řešení.

díky moc

Pavel Janda napsal(a):

@chap Toto issue je už dlouho známé. Zmínil jsem to na Nette Campu.. Vysvětlím:

1, Inline editace se vyrenderuje do formuláře rovnou (pak se jen zviditelní při kliknutí na button)
2, Pokud je tam něco required, začne celý formulář při jakékoliv akci křičet, protože má formulář obalující datagrid blbě nastavený validation scope – zahrnuje InlineEdit/Add form (tuším, že v tom tkví jádro pudla).
3, Fix by měl být jednoduchý..
Jenže!
Přesto, že si na to lidé stěžují už delší dobu, ani jeden z těch cca 20 lidí, kteří o tom mluvili, neposlal PR, nepřišel diskutovat fix, nic.
Takže!
Kdyby byl alespoň nějaký náznak spolupráce, náznak toho, že chce do problému někdo strkat prstíky, budu moc rád nápomocen. Aktuálně to však na žádném svém projektu nepotřebuji, takže nechám toto issue ještě chvilku (třeba měsíc a kus) hnít jako takový průzkum opensource společnosti. Zpětně i předem se za to omlouvám a doufám, že se třeba najde někdo, kdo zlomek času, který třeba ušetřil použitím datagridu, věnuje pokusu o fixnutí validation scope.

Petr Parolek
Člen | 455
+
0
-

@jikki taky se s tím trápím dva dny a nemůžu to dořešit. Rád bych poslal PR, ale sám jsem nenašel řešení,

Jurix
Člen | 11
+
0
-

cafesk8 napsal(a):

Zdravím,

mám naprosto jednoduchhý datagrid, který mi funguje dokud si zaráz nerozkliknu k editaci více řádků zaráz, jakmile dám edit na více řádků a pak na různých řádcích klikám buď save nebo cancel, tak se automaticky vykonávají odkonce namísto u konkrétního řádku.

		$grid = new DataGrid($this, $name);
		$grid->setDataSource($this->myRepository->findAll());
		$grid->addColumnText('input_price', 'Vstup')
			->setSortable()
			->setFilterText('input_price');
		$grid->addColumnText('output_price', 'Výstup')
			->setSortable()
			->setFilterText('output_price');

		$grid->addInlineEdit()
			->onControlAdd[] = function($container) {
				$container->addText('input_price', '');
				$container->addText('output_price', '');
			};

		$grid->getInlineEdit()->onSetDefaults[] = function($container, $item) {
			$container->setDefaults([
				'input_price' => $item->input_price,
				'output_price' => $item->output_price
			]);
		};

V js nemám nic jiného než:

<script>
	$(function () {
		$.nette.init();
	});
</script>

Pokud kliknu např. na editaci řádku č. 3, udělám změny a dám save anebo cancel, tak se správně překreslí ať již ze změnami nebo bez správně řádek č. 3.

Pokud ale otevřu (v tomto pořadí) řádek 1, 2 a nakonec 3 tak poté pokud dám save/cancel u řádku č. 1, provede se změna u řádku č. 3 a po opětovném kliknutí na edit/cancel na řádku č. 1 se provede/překreslí řádek č. 2 a až na třetí pokus se to provede u řádku č. 1.

Pokud si však v js dám:

<script>
	$.nette.ext('datagrid.handling', {
		success: function(payload) {
			console.log(payload);
		}
	});
</script>

Tak se mi do konzole vypíše správně ID upravovaných řádků.

Nevíte někdo co dělám špatně nebo čím by to mohlo být? Anebo prostě akorát ublaboo/datagrid neumí více big-editů zaráz?

Pro ujasnění přidávám screencast zde

Big inline edit tuším není konstruován pro editaci více řádků současně viz příklad

Zkontroluj si zavedené assety.

jikki
Člen | 73
+
0
-

ppar napsal(a):

@jikki taky se s tím trápím dva dny a nemůžu to dořešit. Rád bych poslal PR, ale sám jsem nenašel řešení,

Také jsem stále nenašel řešení. Provizorně jsem to vyrešil tak, že jsem nastavil ->setRequired(false)

<?php
$container->addText('serialNumber', 'messages.serialnumber')
	->setAttribute('placeholder', 'messages.enterserialnumber')
    ->addRule(Form::MAX_LENGTH, 'messages.maxlength', 36)
    ->setRequired(false)
;
?>

A vložení prázdného textu jsem ošetřil v onSubmit[] pomocí flashMessage. Není to ideální, protože to zruší editační či vkládací řádek, ale nic lepšího mě nenapadlo.

Škoda, že @PavelJanda s tím nic neudělá.

Pavel Kravčík
Člen | 1180
+
+1
-

@jikki: Škoda, že s tím ty nic neuděláš. :)

Petr Parolek
Člen | 455
+
0
-

škoda, že nikdo z nás nenašel funkční řešení. Pojdme hoši spojit síly a vyřešit. https://github.com/…ters-sandbox zde je ukázka problému.

Pavel Janda
Člen | 977
+
+1
-

@ppar Super, na tom sandboxu by se to snad mohlo podařit odladit. Já teď, bohužel, moc aplikací s frontendem nedělám a k inline editaci se vůbec nedostanu. Ale takovýhle sandbox je skvělý začátek a i mě teď dodal trochu síly a zvědavosti, abych si to repo přes svýtky vyklonoval.

Petr Parolek
Člen | 455
+
0
-

@PavelJanda ozval se mi jeden na webtrhu https://webtrh.cz/…te-extension, akorát by chtělo dát dohromady bakšiš. Byl bys @jikki ochotný finančně přispět? Mých 500 Kč bude zřejmě málo

Editoval ppar (21. 12. 2018 12:53)

strear
Člen | 1
+
0
-

Ahoj, obaluji sql dotaz fluentem a narazil jsem se na problém s defaultním řazením podle primárního klíče.

Původní sql:
select * from user order by name
Problematicky (obalený) sql:
SELECT * FROM ( select * from user order by name) val ORDER BY "id" ASC LIMIT 15

Datagrid přidává ORDER BY "id", který změní původní order by. Dá se to nějak obejít?

p.s. přidával jsem issue na github:
https://github.com/…d/issues/731

Petr Parolek
Člen | 455
+
0
-

jikki napsal(a):

@PavelJanda Byla tato issue nějak vyřešená prosím? Nenašel jsem řešení.

díky moc

Pavel Janda napsal(a):

@chap Toto issue je už dlouho známé. Zmínil jsem to na Nette Campu.. Vysvětlím:

1, Inline editace se vyrenderuje do formuláře rovnou (pak se jen zviditelní při kliknutí na button)
2, Pokud je tam něco required, začne celý formulář při jakékoliv akci křičet, protože má formulář obalující datagrid blbě nastavený validation scope – zahrnuje InlineEdit/Add form (tuším, že v tom tkví jádro pudla).
3, Fix by měl být jednoduchý..
Jenže!
Přesto, že si na to lidé stěžují už delší dobu, ani jeden z těch cca 20 lidí, kteří o tom mluvili, neposlal PR, nepřišel diskutovat fix, nic.
Takže!
Kdyby byl alespoň nějaký náznak spolupráce, náznak toho, že chce do problému někdo strkat prstíky, budu moc rád nápomocen. Aktuálně to však na žádném svém projektu nepotřebuji, takže nechám toto issue ještě chvilku (třeba měsíc a kus) hnít jako takový průzkum opensource společnosti. Zpětně i předem se za to omlouvám a doufám, že se třeba najde někdo, kdo zlomek času, který třeba ušetřil použitím datagridu, věnuje pokusu o fixnutí validation scope.

Tak jsem trošku se posunul a zkoušel jsem zjišťovat, od jaké verze datagridu se bug objevil. verze 4.4.9 je ještě ok, verze 4.4.10 má zmíněný bug. Předpokládám, že od této verze je bug ve všech verzí. Zkoušel jsem jen některé, abych zjistil od jaké verze je chyba.

EDIT
vypadá, že je viníkem toto https://github.com/…/datagrid.js#…

EDIT:

Hurááá, vyřešno. Problém dělá AJAX https://github.com/…l-refresh.js . Řešením je nenačítat tento JS a vše jede ok.

EDIT:

nesmí se inicializovat v šabloně:

	<!-- Initialize nette.ajax.js after loading the DOM. -->
	<script>
		$.nette.init();
	</script>

Jinak se chyba projeví

Editoval ppar (29. 12. 2018 23:39)

pavelinnuendo
Člen | 33
+
0
-

Lze nějak zobrazit grid, který už má rovnou otevřený inline řádek pro zadání nové položky? Tj. aby nebylo nutné klikat na plus (přidat novou položku)?

Vyřešil jsem to takto:

$(document).ready(function (event) {
	$('#snippet-mujGrid-tbody tr:first').removeClass('datagrid-row-inline-add-hidden');
});

Napadá vás lepší řešení? Děkuji za tip.

Editoval pavelinnuendo (18. 1. 2019 13:24)

Mart78
Člen | 31
+
0
-

Pokud chci vykreslit Action pomocí vlastní šablony nebo rendereru, jakým způsobem získám href parametr z addAction()? Get metoda pro něj není. Ve výchozí šabloně datagridu přitom vlastní šablona pro action možná je. Díky za nasměrování.

Pavel Janda
Člen | 977
+
0
-

@Mart78 Pokud si uděláš custom šablonu, tak si udeš muset i ten href sám vytvořit a vyrenderovat.. Ideálně přes n:href :)

jikki
Člen | 73
+
0
-

Ahoj, v presenteru, kde používám tuto tabulku, mám nadefinovanou proměnnou typu Nette\Http\SessionSection. Podle její hodnoty přepínám zobrazení položek v tabulce mezi zobrazením položek jednotlivě nebo seskupeně. Tlačítko na přepnutí (addToolbarButton) volá ajaxem signál, který změní hodnotu v mé session proměnné a reloadne tabulku. Funguje to bezvadně do doby než použiji filter v tabulce a pak jej resetnu. Poté začne přepínač měnit zobrazení o jedno kliknutí zpozděně. Musím refreshnout celou stránku, aby to fungovalo opět správně. Netuší někdo proč to tak dělá?

díky moc za nakopnutí

Editoval jikki (7. 2. 2019 11:45)

Mart78
Člen | 31
+
0
-

Setkal se někdo s tím že $grid->setDefaultSort(['id' => 'DESC']); řadí jako ASC?
Do SQL dotazu to vygeneruje pouze ORDER BY invoices.id. Pokud změním default sort např na ['price' => 'DESC'] vše funguje správně. Datasource je Nextras ORM – $grid->setDataSource($this->db->invoices->findAll());
Neví někdo prosím?

jAkErCZ
Člen | 321
+
0
-

Zdravím,
mám jeden problém a jeden dotaz :D

Takže problém nevím proč ale po editaci statusu se mi nerefrešne grid i když postupuji podle dokumentace a mám také připojené potřebné js.

/**
    * @param $id
    * @param $new_status
    */
   public function changeStatus($id, $new_status)
   {
       $this->projectRepository->updateStatus($id, $new_status);
       $this->presenter->flashMessage('Oprávnění bylo změněno', 'success');
       if ($this->presenter->isAjax()) {
           $this->presenter->redrawControl('flashMessages');
           $this['projectGrid']->redrawItem($id);
       }

   }

A další věc chci se zeptat jde nějak udělat že když mám možnost změnit status tak pokud vyberu nějaký status tak u něj mít nějakou podmínku že pokud třeba vyberu status zrušeno že mu vyskočí okno kde musí nastavit důvod proč? A pokud to prostě nevyplní tak se ten status nezmění?

Díky

ali
Člen | 342
+
0
-

Uz delsi dobu se trapim s jednim „mensim“ problemem.

Mam v gridu obycejnou hromadnou akci na stazeni PDFek (pomoci mPDF spojim vice PDFek do jednoho souboru).
Problem mi nastane, ze jakmile vyberu akci a zmacknu submit button, provede se pouze ajax request a soubor se nestahne.
Kdyz na submit button kliknu za pridrzeni klavesy CTRL (v Google Chrome se otevre nova zalozka) tak se soubor stahne (z toho usuzuju ze response mam napsanou spravne).
Napada nekoho, jak donutit prohlizec stahnout ten soubor?

Akce:

$grid->addGroupAction('PDF')
	->onSelect[] = function (array $ids): void {
		...
		$this->sendResponse(new Responses\ForceDownload($mpdf->Output('', \Mpdf\Output\Destination::STRING_RETURN), 'mix.pdf'));
	};

Response:

<?php

declare(strict_types=1);

namespace Service\Responses;

use Nette;

final class ForceDownload implements Nette\Application\IResponse
{
	/** @var string */
	private $content;

	/** @var string */
	private $fileName;

	/** @var string */
	private $contentType;


	/**
	 * @param string $content
	 * @param string $fileName
	 * @param string $contentType
	 */
	public function __construct(string $content, string $fileName, string $contentType = 'application/octet-stream')
	{
		$this->content = $content;
		$this->fileName = $fileName;
		$this->contentType = $contentType;
	}


	/**
	 * @param Nette\Http\IRequest $httpRequest
	 * @param Nette\Http\IResponse $httpResponse
	 */
	public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse): void
	{
		$httpResponse->setContentType($this->contentType);
		$httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $this->fileName . '"');
		$httpResponse->setHeader('Content-Length', strlen($this->content));

		if ($this->content !== null) {
			echo $this->content;
		}
	}
}
ondrejd
Člen | 22
+
0
-

Zkusil bych přidat ještě tuto hlavičky (před Content-Disposition), tzn. v tvém případě:

$httpResponse->setHeader("Content-Description: File Transfer");
$httpResponse->setHeader("Content-Type: application/octet-stream");
jAkErCZ
Člen | 321
+
0
-

Chci se zeptat je nějaká možnost že pře změně statusu se otevře modalní okno kde bude nutné něco vyplnit jinak se ten status změnit nemůže? :D

ali
Člen | 342
+
0
-

@ondrejd bohuzel nepomohlo