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

Petr Parolek
Člen | 408
+
+1
-

Petr Parolek napsal(a):

POZOR na BC break ve verzi 6.9.3

		$inlineAdd->onSubmit[] = function (ArrayHash $values): void {
			bdump($values);
			$this->flashMessage('Record was added!', 'success');
			$this->redrawControl('flashes');
		};

předtím byl typeint Nette\Utils\ArrayHash a nyní je typehint array

@PavelJanda díky za opravu ve verzi 6.9.4.

jAkErCZ
Člen | 321
+
-1
-

Ahoj všem,
je nějaká možnost jak v datagridu obarvit daný řádek? Třeba pokud v db je neaktivní bude červený a pokud je aktivní bude zelený?

Díky všem za rady.

Tomáš Vodička
Člen | 16
+
+2
-

jAkErCZ napsal(a):

Ahoj všem,
je nějaká možnost jak v datagridu obarvit daný řádek? Třeba pokud v db je neaktivní bude červený a pokud je aktivní bude zelený?

Díky všem za rady.

Třídu řádku můžeš ovlivnit pomocí setRowCallback()

https://contributte.org/…rid/row.html#…

d@rkWolf
Člen | 140
+
0
-

Zdravím, sem úplně zoufalý, nenarazil někdo na situaci, že mu addColumnStatus vypíše jen číslo, místo vytvoření toho buttonu na přepnutí stavu?

Už jsem datagrid párkrát použil a dycky to fungovalo, jediný rozdíl je o pár desetinek novější Nette oproti minulému použití a to, že teď tahám data přes Doctrine, místo Nette Database. Řádek se vypíše, tlačítka v Action se vytvoří, ale ve sloupci pro status mám místo buttonu „1“(1/0 – zapnuto/vypnuto)

Je úplně fuk, co tam dám, na nic to nereaguje, ani přesně skopírovaný kód z dokumentace jen úpravou názvu sloupce nevytvoří tlačítko.

Ozzrel
Generous Backer | 19
+
0
-

Ahoj, může mi někdo poradit jak se inlineeditu řekne že to je blbě :-) a má probliknout červeně a ne zeleně. V kodu jsem to trochu vyčuchal ale nevím jak mu nahlásit po validaci že to je prostě špatně a má použít třídu ‚edited-error‘.

Dokumentace jen zmiňuje, že to zeleně blikne a vlastní render. Bohatě mi stačí vestavěné funkce a proto se pídím po tomhle.

Pavel Janda
Člen | 965
+
0
-

@d@rkWolf Ahoj, mohl bys, pls, udělat nějaké sandbox-like repo na githubu? Nebo alespoň gist? Abych si to mohl rozjet a vyzkoušet. Zatím jsem se s tím nesetkal. Kdyby se to povedlo, usnadnilo by mi to testování. Díky moc! (Můžeš použít https://github.com/…rid-skeleton)

Pavel Janda
Člen | 965
+
0
-

@Ozzrel Teoreticky by mělo stačit vrátit nějaký error http kód. Obslužný JavaScript vypadá cca takto:

$.nette.ajax({
	url: cell.data('datagrid-editable-url'),
	data: {
		value: value
	},
	type: 'POST',
	success: function(payload) {
		// ...
		return cell.addClass('edited');
	},
	error: function() {
		cell.html(cell.data('originalValue'));
		return cell.addClass('edited-error');
	}
});

Editoval Pavel Janda (22. 2. 10:13)

d@rkWolf
Člen | 140
+
0
-

@PavelJanda v pátek jsem s v tom dál vrtal, odpojil jsem datasource Doctriny a místo něj připojil obyčejné pole(stejný formát, jen sem ořezal pár sloupců), na nic dalšího jsem nešáhnul, jen záměna v setDatasource(pole místo funkce z repozitáže s queryBuilderem) a když sem dal F5, přepínač stavu tam byl…no a potom jsem vyměnil zpět zase tu funkce s queryBuilderem…a ten přepínač tam zůstal a od té doby tam je, nechápu, jak je něco takového možné…

jediné vysvětlení, co mě napadalo, je v addColumnStatus->addOption sem měl ten stavový parametr ve špatném formátu, ale nechápu, jak by se přehozením na pole změnil…mám to v Doctrine Entitě zadané jako column type boolean, v DB je to vygenerované jako tinyInt, zkoušel jsem tam dávat true, ‚true‘, 1, ‚1‘, nevím jaké další varianty a nic-a teď mi to funguje s použitím true…

cache sem mezitím smazal x-krát, takže ničím v cache to být nemohlo

Editoval d@rkWolf (24. 2. 15:57)

Ozzrel
Generous Backer | 19
+
0
-

@PavelJanda tak jsem to zkoušel všelijak a úspěch se nedostavil.
Pak jsem zjistil omylem, že to funguje a stačí die(); ale bohužel jen u „malého“ inlineeditu.
Stejný postup u „velkého“ nefunguje a editace se chová tak, že se vrátí response ale editace se neukončí a tlačítko SAVE vypadá nefunkčně pro uživatele bez udání důvodu.

			$inlineEdit->onSubmit[] = function ($id, $values) {
			try {
				$this->model->findNeco()->get($id)->update($values);
			} catch ( \Nette\Database\UniqueConstraintViolationException $e) {
				$this->flashMessage('Už je to v databázi', 'error');
				$this->redrawControl('flash');
				die();
			}
			};

No nechám zelenou a ve flashmassage chybu co se děje. Užíci to poberou :)

datagrid 6.9.4 + Naja 2.1.4

Editoval Ozzrel (25. 2. 19:31)

Pavel Janda
Člen | 965
+
0
-

@Ozzrel Velký inline edit funguje jinak, přes nette forms. Zkusil bych v takovém případě jednoduše přidat error do formu (Form/Input::AddError)

Felix
Nette Core | 1155
+
+2
-

Bootstrap 5

Pripravil jsem PR s aktualizaci bootstrapu na verzi 5.0 (https://github.com/…id/pull/1021).

Zaroven jsem upravil i ukazkovy skeleton contributte/datagrid-skeleton (https://github.com/…eton/pull/45).

Prosim o otestovani. Diky.

Melebius
Člen | 10
+
0
-

Chtěl bych vás poprosit o radu: Mám sloupec, který používá renderer (k formátování měny) a zároveň má být editovatelný (setEditableInputType()). To v zásadě funguje, ale na rozdíl od sloupců bez rendereru se při otevření editačního pole nepředvyplní stávající hodnota. Je možné takovému editačnímu poli nějak nastavit hodnotu, která se má předvyplnit? Představoval bych si třeba metodu setEditableValue()

Příklad: V gridu se vypisuje 10 Kč, když na to kliknu, mělo by se objevit 10, ale místo toho se objeví jen prázdné pole.

Šaman
Člen | 2591
+
0
-

Nedaří se mi rozchodit Datagrid s Naja2. A protože se v tomto vlákně už hodně špatně dohledávají už vyřešené problémy, položil jsem to jako dotaz ve vlastním vlákně. Ale týká se to nejspíš jen Datagridu. Aktuálně mi funguje jen s nette.ajaxNaja 1.8.x

NouF
Backer | 31
+
0
-

Ahoj,

chápu dobře že tento řádek generuje data attribute pro multi tlačítka?

https://github.com/…tiAction.php#L63

Jestli ano, tak bootstrap 5 vyžaduje tuto podobu „data-bs-toggle“

Pepino
Člen | 103
+
0
-

@NouF datagrid je pro b4, verze pro b5 zatím ještě není

NouF
Backer | 31
+
0
-

Ahoj, já odkazoval na branch, kde je příprava na bootstrap 5.

ale díky za info

Melebius
Člen | 10
+
+1
-

Chtěl bych vás poprosit o radu: Mám sloupec, který používá renderer (k formátování měny) a zároveň má být editovatelný (setEditableInputType()). To v zásadě funguje, ale na rozdíl od sloupců bez rendereru se při otevření editačního pole nepředvyplní stávající hodnota.

Nakonec jsem to s pomocí kolegy vyřešil pomocí DataGrid::addColumnCallback. JS je na to naštěstí připravený a očekává hodnotu k editaci v atributu data-datagrid-editable-value:

$grid->addColumnCallback('value', function ($column, $item) {
    $column->getElementPrototype('td')->addAttributes(['data-datagrid-editable-value' => $item->value]);
});
janvacek
Člen | 7
+
0
-

Ahoj, je prosím nějaký způsob/možnost, jak se kompletně odtrhnout s datagridem od Bootstrapu a napojit si jakýkoliv jiný framework/vlastní styly?

V CMS používám jiný framework a importovat si BS4 a řešit konflikty s mým frameworkem je něco, čemu bych se chtěl vyhnout

Děkuji

theo
Člen | 55
+
0
-

Snažím se pomocí metody addGroupButtonAction vytvořit funkcionalitu, která by mi vyexportovala vybrané (zaškrtnuté) položky z DG do XLS souboru (HTML soubor s tabulkou) a vrátil mi tento soubor ke stažení.
Potíž je ale v tom, že když zmáčknu tlačítko Export, tak se vše provede v AJAXovém volání, takže browser tento soubor nestáhne a nenabídne k uložení.

Existuje nějaký způsob jak donutit DG, aby nedělal obsluhu exportního volání AJAXem, ale normálním synchronním požadavkem? Dává to, jak se o to snažím vůbec smysl?

Domm
Člen | 2
+
+1
-

theo napsal(a):

Snažím se pomocí metody addGroupButtonAction vytvořit funkcionalitu, která by mi vyexportovala vybrané (zaškrtnuté) položky z DG do XLS souboru (HTML soubor s tabulkou) a vrátil mi tento soubor ke stažení.
Potíž je ale v tom, že když zmáčknu tlačítko Export, tak se vše provede v AJAXovém volání, takže browser tento soubor nestáhne a nenabídne k uložení.

Existuje nějaký způsob jak donutit DG, aby nedělal obsluhu exportního volání AJAXem, ale normálním synchronním požadavkem? Dává to, jak se o to snažím vůbec smysl?

GroupActiony jsou k tomuhle moc neohrabané, jak by jsi jako uživatel např. exportoval více stránek najednou?
Naštěstí v rámci datagridu existuje něco co tvůj požadavek řeší, viz. https://contributte.org/…/export.html#…
Je to exportní callback s možností exportu zafiltrovaných dat nebo všech dat, pak už je na tobě jakou formou to chceš předat uživateli.