Group actions:
Id Name Birthday Action
1 Charming Chicken 23. 2. 1982
2 Intellectual Bubble Disaster 2. 1. 1997
3 Crazy Copperhead 21. 5. 1955
4 Difficult Deer 23. 5. 1964
5 Underground Harpoon Gladiator 23. 8. 1939
6 Anxious Alpaca 25. 9. 1985
7 Misty Meerkat 11. 3. 1974
8 Funky Chainsaw of Mystery 23. 5. 1946
9 Sid Meier Deer Hunter Hoedown 20. 4. 1944
10 Terrible Karaoke of Mystery 10. 4. 1981
11 Joyous Jaguar 19. 9. 1994
12 Silly Sheep 19. 1. 1936
13 Grumpy Gerenuk 27. 9. 1978
14 Glorious Gaur 15. 12. 1977
15 Xenophobic Xenomorph 3. 3. 1987
16 Relieved Rhinoceros 11. 2. 1945
17 Bad Buzzard 8. 3. 1983
18 Dangerous Dolphin 28. 4. 1931
19 Quaint Quoll 27. 10. 1949
20 Thoughtless Turkey 14. 8. 1941
( Items: 1 - 20 from 1000 )
  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('left')
		->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(function ($item): bool {
		return $item->id % 2 === 0;
	});

	$grid->allowRowsAction('delete', function ($item): bool {
		return $item->id % 3 === 0;
	});

	$grid->allowRowsAction('detail', function ($item): bool {
		return $item->id % 4 === 0;
	});

	return $grid;
}