Datatable : on init load data for the first page

This commit is contained in:
acognet
2021-08-20 15:54:16 +02:00
parent e095749c90
commit 280afb35a9
5 changed files with 130 additions and 68 deletions

View File

@@ -44,6 +44,7 @@ class DataTable extends UIContentBlock
protected $aAjaxData;
protected $aDisplayColumns;
protected $aResultColumns;
protected $sJsonData;
/**
* Panel constructor.
@@ -57,6 +58,7 @@ class DataTable extends UIContentBlock
$this->aDisplayColumns = [];
$this->aOptions = [];
$this->aResultColumns = [];
$this->sJsonData = '';
}
/**
@@ -176,6 +178,26 @@ class DataTable extends UIContentBlock
$this->aOptions = $aOptions;
}
/**
* @return string
*/
public function GetJsonData(): string
{
return $this->sJsonData;
}
/**
* @param string $aData
*
* @return $this
*/
public function SetJsonData(string $sJSON)
{
$this->sJsonData = $sJSON;
return $this;
}
public function GetJSRefresh(): string
{
return "$('#".$this->sId."').DataTable().clearPipeline();
@@ -185,15 +207,17 @@ class DataTable extends UIContentBlock
public function GetDisabledSelect(): array
{
$aExtraParams = $this->aAjaxData['extra_params'];
if(isset($aExtraParams['selection_enabled']) ){
if (isset($aExtraParams['selection_enabled'])) {
$aListDisabled = [];
foreach( $aExtraParams['selection_enabled'] as $sKey=>$bValue){
foreach ($aExtraParams['selection_enabled'] as $sKey => $bValue) {
if ($bValue == false) {
$aListDisabled[] = $sKey;
}
}
return $aListDisabled;
}
return [];
}
}

View File

@@ -18,6 +18,7 @@ use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Toolbar\ToolbarUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
use Combodo\iTop\Controller\AjaxRenderController;
use DBObjectSet;
use Dict;
use MenuBlock;
@@ -286,14 +287,14 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$oSet->SetLimit($oCustomSettings->iDefaultPageSize);
}
if (count($oCustomSettings->aColumns) == 0)
{
if (count($oCustomSettings->aColumns) == 0) {
$oCustomSettings->aColumns = $oDefaultSettings->aColumns;
}
if(count($oCustomSettings->GetSortOrder()) == 0){
if (count($oCustomSettings->GetSortOrder()) == 0) {
$oCustomSettings->aSortOrder = $oDefaultSettings->aSortOrder;
}
$sIdName = isset($extraParams["id_for_select"]) ? $extraParams["id_for_select"] : "";
// Load only the requested columns
$aColumnsToLoad = array();
foreach ($oCustomSettings->aColumns as $sAlias => $aColumnsInfo) {
@@ -313,6 +314,10 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$aColumnsToLoad[$sAlias][] = $sAttCode;
}
}
} else {
if ($sIdName == "") {
$sIdName = $sAlias."/_key_";
}
}
}
}
@@ -420,15 +425,16 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$oDataTable->SetOptions($aOptions);
$oDataTable->SetAjaxUrl(utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php");
$oDataTable->SetAjaxData([
"operation" => 'search',
"filter" => $oSet->GetFilter()->serialize(),
"columns" => $oCustomSettings->aColumns,
"extra_params" => $aExtraParams,
"operation" => 'search',
"filter" => $oSet->GetFilter()->serialize(),
"columns" => $oCustomSettings->aColumns,
"extra_params" => $aExtraParams,
"class_aliases" => $aClassAliases,
"select_mode" => $sSelectMode,
"select_mode" => $sSelectMode,
]);
$oDataTable->SetDisplayColumns($aColumnDefinition);
$oDataTable->SetResultColumns($oCustomSettings->aColumns);
$oDataTable->SetJsonData(json_encode(AjaxRenderController::GetDataForTable($oSet, $aClassAliases, $aColumnsToLoad, $sIdName, $aExtraParams)));
return $oDataTable;
}
@@ -538,6 +544,7 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$oSet->SetLimit($oCustomSettings->iDefaultPageSize);
}
$sIdName = isset($extraParams["id_for_select"]) ? $extraParams["id_for_select"] : "";
// Load only the requested columns
$aColumnsToLoad = array();
foreach ($oCustomSettings->aColumns as $sAlias => $aColumnsInfo) {
@@ -553,13 +560,16 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$aColumnsToLoad[$sAlias][] = $sAttCode;
}
}
} else {
if ($sIdName == "") {
$sIdName = $sAlias."/_key_";
}
}
}
}
$oSet->OptimizeColumnLoad($aColumnsToLoad);
$aColumnDefinition = [];
$aSortOrder = [];
$iIndexColumn = 0;
$bSelectMode = isset($aExtraParams['selection_mode']) ? $aExtraParams['selection_mode'] == true : false;
@@ -647,15 +657,16 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$oDataTable->SetOptions($aOptions);
$oDataTable->SetAjaxUrl("ajax.render.php");
$oDataTable->SetAjaxData([
"operation" => 'search',
"filter" => $oSet->GetFilter()->serialize(),
"columns" => $oCustomSettings->aColumns,
"extra_params" => $aExtraParams,
"operation" => 'search',
"filter" => $oSet->GetFilter()->serialize(),
"columns" => $oCustomSettings->aColumns,
"extra_params" => $aExtraParams,
"class_aliases" => $aClassAliases,
"select_mode" => $sSelectMode,
"select_mode" => $sSelectMode,
]);
$oDataTable->SetDisplayColumns($aColumnDefinition);
$oDataTable->SetResultColumns($oCustomSettings->aColumns);
$oDataTable->SetJsonData(json_encode(AjaxRenderController::GetDataForTable($oSet, $aClassAliases, $aColumnsToLoad, $sIdName, $aExtraParams)));
return $oDataTable;
}