Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Widgets\DataTable\Feature;
|
||||
|
||||
use Xentral\Widgets\DataTable\Column\Column;
|
||||
use Xentral\Widgets\DataTable\Column\ColumnFormatter;
|
||||
use Xentral\Widgets\DataTable\DataTableInterface;
|
||||
use Xentral\Widgets\DataTable\Exception\DataTableExceptionInterface;
|
||||
use Xentral\Widgets\DataTable\Exception\InvalidArgumentException;
|
||||
|
||||
final class RowDetailsFeature implements DataTableFeatureInterface
|
||||
{
|
||||
/** @var string $ajaxUrl */
|
||||
private $ajaxUrl;
|
||||
|
||||
/** @var string $ajaxMethod */
|
||||
private $ajaxMethod;
|
||||
|
||||
/** @var array $ajaxParams @todo Additional AJAX parameter */
|
||||
private $ajaxParams = [];
|
||||
|
||||
/**
|
||||
* Der Wert aus der id-Spalte wird als POST-Parameter `id` übergeben
|
||||
*
|
||||
* @param string $ajaxUrl `./index.php?module=foo&action=bar`
|
||||
* @param string $ajaxMethod [GET|POST]
|
||||
* @param callable|null $customFormatter @todo
|
||||
*/
|
||||
public function __construct($ajaxUrl, $ajaxMethod = 'POST', $customFormatter = null)
|
||||
{
|
||||
$ajaxMethod = strtoupper($ajaxMethod);
|
||||
if (!in_array($ajaxMethod, ['GET', 'POST'])) {
|
||||
throw new InvalidArgumentException(sprintf('Invalid method "%s".', $ajaxMethod));
|
||||
}
|
||||
|
||||
$this->ajaxUrl = $ajaxUrl;
|
||||
$this->ajaxMethod = $ajaxMethod;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DataTableInterface $table
|
||||
*
|
||||
* @throws DataTableExceptionInterface
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function modifyTable(DataTableInterface $table)
|
||||
{
|
||||
$table->getOptions()->setOption('rowDetails', [
|
||||
'ajax' => [
|
||||
'url' => $this->ajaxUrl,
|
||||
'method' => $this->ajaxMethod,
|
||||
'data' => $this->ajaxParams,
|
||||
],
|
||||
]);
|
||||
|
||||
// Detail-Spalte erzeugen
|
||||
$newCol = Column::fixed('details', '', 'center', '20px');
|
||||
$newCol->setFormatter(ColumnFormatter::template('<span class="details" data-id="{ID}"></span>'));
|
||||
$newCol->addCssClass('dt-details');
|
||||
|
||||
// Detail-Spalte vor erste Spalte einfügen
|
||||
/** @var Column $firstCol */
|
||||
$firstCol = $table->getColumns()->getByIndex(0);
|
||||
$table->getColumns()->addBefore($newCol, $firstCol->getName());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user