N°2598 - When refreshing a list, loosing page and order - change of dashboard refresh mecanism

This commit is contained in:
acognet
2021-02-15 16:54:46 +01:00
parent 4c23f1f32b
commit dbe747ea23
27 changed files with 422 additions and 346 deletions

View File

@@ -37,7 +37,7 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
{
public const TWIG_TAG_NAME = 'UIDataTable';
public const UI_BLOCK_CLASS_NAME = DataTable::class;
/**
* @param \WebPage $oPage
* @param string $sListId
@@ -267,6 +267,12 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$oSet->SetLimit($oCustomSettings->iDefaultPageSize);
}
if (sizeof($oCustomSettings->aColumns) == 0)
{
$oCustomSettings->aColumns = $oDefaultSettings->aColumns;
$oCustomSettings->aSortOrder = $oDefaultSettings->aSortOrder;
}
// Load only the requested columns
$aColumnsToLoad = array();
foreach ($oCustomSettings->aColumns as $sAlias => $aColumnsInfo) {
@@ -746,24 +752,28 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
return $aOptions;
}
public static function MakeForStaticData(string $sTitle, array $aColumns, array $aData, ?string $sId = null)
public static function MakeForStaticData(string $sTitle, array $aColumns, array $aData, ?string $sId = null, array $aExtraParams = [],
string $sFilter = "")
{
$oBlock = new UIContentBlock();
$oTitle = TitleUIBlockFactory::MakeNeutral($sTitle, 3);
$oBlock->AddSubBlock($oTitle);
$oTable = new StaticTable($sId);
$oTable = new StaticTable($sId, [], $aExtraParams);
$oTable->SetColumns($aColumns);
$oTable->SetData($aData);
$oTable->SetFilter($sFilter);
$oBlock->AddSubBlock($oTable);
return $oBlock;
}
public static function MakeForForm(string $sRef, array $aColumns, array $aData = []): FormTable
public static function MakeForForm(string $sRef, array $aColumns, array $aData = [], string $sFilter= ''): FormTable
{
$oTable = new FormTable("datatable_".$sRef);
$oTable->SetRef($sRef);
$oTable->SetColumns($aColumns);
$oTable->SetFilter($sFilter);
foreach ($aData as $iRowId => $aRow) {
$oRow = new FormTableRow($sRef, $aColumns, $aRow, $iRowId);

View File

@@ -19,7 +19,6 @@ class FormTableRow extends UIBlock
// Overloaded constants
public const BLOCK_CODE = 'ibo-formtablerow';
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/datatable/static/formtablerow/layout';
public const DEFAULT_JS_TEMPLATE_REL_PATH = 'base/components/datatable/static/formtablerow/layout';
/** @var string */
private $sRef;

View File

@@ -3,6 +3,8 @@
namespace Combodo\iTop\Application\UI\Base\Component\DataTable\StaticTable;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
use Combodo\iTop\Application\UI\Base\tJSRefreshCallback;
use utils;
/**
* @copyright Copyright (C) 2010-2020 Combodo SARL
@@ -15,6 +17,8 @@ use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
*/
class StaticTable extends UIContentBlock
{
use tJSRefreshCallback;
// Overloaded constants
public const BLOCK_CODE = 'ibo-datatable';
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/datatable/static/layout';
@@ -51,12 +55,16 @@ class StaticTable extends UIContentBlock
* ]
*/
private $aData;
private $aExtraParams;
/*@var string $sUrlForRefresh*/
private $sFilter;
public function __construct(string $sId = null, array $aContainerCSSClasses = [])
public function __construct(string $sId = null, array $aContainerCSSClasses = [], array $aExtraParams = [])
{
parent::__construct($sId, $aContainerCSSClasses);
$this->aColumns = [];
$this->aData = [];
$this->aExtraParams = $aExtraParams;
}
/**
@@ -91,4 +99,27 @@ class StaticTable extends UIContentBlock
$this->aData = $aData;
}
/**
* @param string $sUrlForRefresh
*/
public function SetFilter($sFilter): void
{
$this->sFilter = $sFilter;
}
public function GetJSRefresh(): string
{
//$('#".$this->sId."').DataTable().clear().rows.add(data).draw()
$aParams = [
'style' => 'list',
'filter' => $this->sFilter,
'extra_params' => $this->aExtraParams,
];
return "$.post('".utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=refreshDashletList', ".json_encode($aParams).",
function (data) {
$('#".$this->sId."').DataTable().clear();
$('#".$this->sId."').dataTable().fnAddData(data);
});";
}
}