podmíněná editace v gridu

yucikala
Člen | 3
+
0
-

Dobrý den.
Používám ublaboo/datagrid. A v něm mám zapnutou inline Editaci.

Potřebloval bych ale mít možnost podmíněné inline editace. Tedy možnost některé řádky editovat a některé ne. Zkoušel jsem přes addAction přidat editaci (zkopírováním vyrendrovaného html z tlačítka pro editaci), ale to se mi nepovedlo rozchodit. Umím vypnout zapnout editaci pro všechny řádky v tabulce. Ale já potřebuji povolit editaci jen pro nějaké.

Nemáte náhodou někdo nějaké řešení?

Díky

Kamil Valenta
Člen | 752
+
0
-

Takto například půjdou editovat jen řádky se sudými ID…

$grid->allowRowsAction('edit', function($item) {
	return $item->id % 2;
});

--
EDIT: aha, v případě inline editace si to asi na akci nesáhne. Pokud ne, obalil bych IFem container a negeneroval žádné inputy, pokud není pro daný řádek editace přípustná…

Editoval Kamil Valenta (6. 9. 2021 17:49)

yucikala
Člen | 3
+
0
-

Děkuju za odpověď a snahu pomoci.
Nakonec jsem to obešel malým hackem, kdy kontroluji samozřejmě na straně serveru, jestli je update možný, ale na straně klienta tlačítko na editaci schovávám.

Řešení (samotnou schovávací fci jsem pojmenoval hideShowEditIcons(), v ní sleduji, zda existuje tlačítko „success“, pokud ano, smím editovat. Tlačítko success mám pak v controleru v php pod ifem… ):

function hideShowEditIcons(){
$(„a.datagrid-inline-edit-trigger“).hide();
var tblRows = $(„#snippet-reservationProvisionControl-reservationProvisionsGrid-table tr[data-id]“);

tblRows.each(function(index, value) {
var row = $(this).find(„a.btn-success“).length;
if (row > 0){
$(this).find(„a.datagrid-inline-edit-trigger“).show();
}
});
 }

$(document).ready(function() {
hideShowEditIcons();

/*
see https://stackoverflow.com/…-is-complete
při stránkování se nám nezavolá document.ready, protože se jede přes XMLHttpRequest. Tady pak nepomáhají klasické jquery ajax.completed atp…
 */

var oldOpen = XMLHttpRequest.prototype.open;

function onXmlRequestLoadEnd(event) {
hideShowEditIcons();
 }

XMLHttpRequest.prototype.open = function() {
// when an XHR object is opened, add a listener for its readystatechange events
this.addEventListener(„loadend“, onXmlRequestLoadEnd)

// run the real open
oldOpen.apply(this, arguments);
}
 });

Ozzrel
Generous Backer | 51
+
0
-

No to je pořešeno funkcí allowRowsInlineEdit viz dokumentace

yucikala
Člen | 3
+
0
-

Ozzrel napsal(a):

No to je pořešeno funkcí allowRowsInlineEdit viz dokumentace

Uf. Jak někdy taková hovadina zabere tolik času. Díky. Tohle je přesně ono.