<?php
/**
* Example 08 — Row Events
*
* Shows how to handle row-level events like click, double-click,
* and right-click (context menu).
*/
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use Italix\DataSets\DataSet;
use Italix\DataSets\Drivers\Tabulator\TabulatorDriver;
$ds = new DataSet($usersTable);
$ds->columns(['name', 'email', 'role', 'created_at']);
$ds->ajax_url('/api/users');
// ---- Row Events ------------------------------------------------------------
// Map event names to JS function names. The JS function receives:
// (rowData, row, event) for row events
//
// Available row events:
// row_click — single click on a row
// row_dbl_click — double click on a row
// row_context — right-click on a row
// row_selected — row becomes selected
// row_deselected — row becomes deselected
$ds->on('row_click', 'onRowClick');
$ds->on('row_dbl_click', 'onRowDblClick');
$ds->on('row_context', 'onRowContext');
// ---- Render ----------------------------------------------------------------
$driver = new TabulatorDriver();
$script = $driver->render_script($ds, '#users-table');
?>
<div id="users-table"></div>
<script>
function onRowClick(rowData, row, event) {
console.log('Clicked row:', rowData.name);
}
function onRowDblClick(rowData, row, event) {
// Open the edit page on double-click
window.location.href = '/users/' + rowData.id + '/edit';
}
function onRowContext(rowData, row, event) {
event.preventDefault();
// Show a custom context menu
showContextMenu(event.pageX, event.pageY, [
{ label: 'Edit', action: function() { onRowDblClick(rowData); } },
{ label: 'Copy Email', action: function() { navigator.clipboard.writeText(rowData.email); } },
]);
}
<?= $script ?>
</script>