Group actions:
Id Name Birthday Action
41 Chinese Spelunking Battle 13. 5. 1943
42 Masters of the Programming Trilogy 18. 8. 1990
43 Depressing Sudoku Arena 18. 12. 1967
44 Merciless Nazi Strike Force 27. 5. 1964
45 Grimy Mall Gaiden 21. 9. 1992
46 Cute Constrictor 19. 10. 1938
47 Defeated Dove 26. 1. 1938
48 Talented Teira 22. 6. 1995
49 Grumpy Goldfinch 11. 4. 1983
50 Golden Cardboard Ultra 15. 12. 1939
51 Amazon Elevator Agent 22. 9. 1987
52 All-Star Cheese Dash 2. 7. 1983
53 Nutty Nightingale 10. 4. 1993
54 Defeated Dog 11. 6. 1997
55 Dull Dormouse 25. 10. 1967
56 Graceful Gazelle 27. 11. 1993
57 Precious Pig 24. 10. 1958
58 Special Chase Hop-A-Bout 28. 6. 1975
59 Smiling Sandpiper 14. 5. 1993
60 Yucky Yak 19. 10. 1995
( Items: 41 - 60 from 1020 )
  See the code below 👇 or see GitHub
public function createComponentGrid(): DataGrid
{
	$grid = new DataGrid();

	$grid->setDataSource($this->dibiConnection->select('*')->from('users'));

	$grid->setItemsPerPageList([20, 50, 100]);

	$grid->setRowCallback(function ($item, $tr): void {
		$tr->addClass('super-' . $item->id);
	});

	$grid->addColumnNumber('id', 'Id')
		->setAlign('start')
		->setSortable();

	$grid->addColumnText('name', 'Name')
		->setSortable();

	$grid->addColumnDateTime('birth_date', 'Birthday');

	$grid->addAction('detail', '', 'this')
		->setIcon('sun')
		->setTitle('Detail');

	$grid->addAction('delete', '', 'delete!')
		->setIcon('trash')
		->setTitle('Delete')
		->setClass('btn btn-xs btn-danger ajax')
		->setConfirmation(
			new StringConfirmation('Do you really want to delete example %s?', 'name')
		);

	$grid->addGroupAction('Delete')->onSelect[] = [$this, 'groupDelete'];

	$grid->allowRowsGroupAction(fn ($item): bool => $item->id % 2 === 0);

	$grid->allowRowsAction('delete', fn ($item): bool => $item->id % 3 === 0);

	$grid->allowRowsAction('detail', fn ($item): bool => $item->id % 4 === 0);

	return $grid;
}