Disable drag&drop events for the default home

This commit is contained in:
Yonas Habteab 2022-06-08 12:57:32 +02:00
parent 4fc410c6e9
commit f9aba0c7ff
7 changed files with 45 additions and 5 deletions

View File

@ -170,7 +170,7 @@ trait DashboardManager
'user_id' => self::getUser()->getAdditional('id'), 'user_id' => self::getUser()->getAdditional('id'),
'name' => $home->getName(), 'name' => $home->getName(),
'label' => $home->getTitle(), 'label' => $home->getTitle(),
'priority' => $home->getName() === DashboardHome::DEFAULT_HOME ? 0 : $priority++, 'priority' => $home->isDefaultHome() ? 0 : $priority++,
'type' => $home->getType() !== Dashboard::SYSTEM ? $home->getType() : Dashboard::PRIVATE_DS 'type' => $home->getType() !== Dashboard::SYSTEM ? $home->getType() : Dashboard::PRIVATE_DS
]); ]);

View File

@ -44,6 +44,16 @@ abstract class ItemListControl extends BaseHtmlElement
*/ */
abstract protected function createItemList(): BaseHtmlElement; abstract protected function createItemList(): BaseHtmlElement;
/**
* Get whether to render the drag initiator icon bars
*
* @return bool
*/
protected function shouldRenderDragInitiator(): bool
{
return true;
}
/** /**
* Get a drag initiator for this widget item * Get a drag initiator for this widget item
* *
@ -76,7 +86,10 @@ abstract class ItemListControl extends BaseHtmlElement
])); ]));
$header->addHtml(HtmlElement::create('div', ['class' => 'spacer'])); $header->addHtml(HtmlElement::create('div', ['class' => 'spacer']));
if ($this->shouldRenderDragInitiator()) {
$header->addHtml(self::createDragInitiator()); $header->addHtml(self::createDragInitiator());
}
$this->addHtml($header); $this->addHtml($header);
} }

View File

@ -152,7 +152,7 @@ class Dashboard extends BaseHtmlElement implements DashboardEntry
protected function assemble() protected function assemble()
{ {
$activeHome = $this->getActiveHome(); $activeHome = $this->getActiveHome();
if (! $activeHome || (! $activeHome->hasEntries() && $activeHome->getName() === DashboardHome::DEFAULT_HOME)) { if (! $activeHome || (! $activeHome->hasEntries() && $activeHome->isDefaultHome())) {
$this->setAttribute('class', 'dashboard-introduction'); $this->setAttribute('class', 'dashboard-introduction');
$this->addHtml(HtmlElement::create('h2', null, t('Welcome to Icinga Web 2!'))); $this->addHtml(HtmlElement::create('h2', null, t('Welcome to Icinga Web 2!')));

View File

@ -63,6 +63,16 @@ class DashboardHome extends BaseDashboard implements Sortable
return $self; return $self;
} }
/**
* Get whether this home is the default one
*
* @return bool
*/
public function isDefaultHome(): bool
{
return $this->getName() === self::DEFAULT_HOME;
}
/** /**
* Set the type of this dashboard home * Set the type of this dashboard home
* *

View File

@ -26,6 +26,12 @@ class DashboardHomeList extends ItemListControl
public function __construct(DashboardHome $home) public function __construct(DashboardHome $home)
{ {
$this->home = $home; $this->home = $home;
$this->init();
}
protected function init()
{
if (! $this->home->hasEntries()) { if (! $this->home->hasEntries()) {
// Just retry to load dashboards // Just retry to load dashboards
$this->home->loadDashboardEntries(); $this->home->loadDashboardEntries();
@ -34,6 +40,9 @@ class DashboardHomeList extends ItemListControl
$this->getAttributes() $this->getAttributes()
->registerAttributeCallback('data-icinga-home', function () { ->registerAttributeCallback('data-icinga-home', function () {
return $this->home->getName(); return $this->home->getName();
})
->registerAttributeCallback('data-disable-widget-sorting', function () {
return $this->home->isDefaultHome();
}); });
} }
@ -61,6 +70,11 @@ class DashboardHomeList extends ItemListControl
return $this->home->isActive(); return $this->home->isActive();
} }
protected function shouldRenderDragInitiator(): bool
{
return ! $this->home->isDefaultHome();
}
protected function createItemList(): BaseHtmlElement protected function createItemList(): BaseHtmlElement
{ {
if (! $this->headerDisabled) { if (! $this->headerDisabled) {

View File

@ -24,7 +24,7 @@ class Settings extends BaseHtmlElement
protected function assemble() protected function assemble()
{ {
$activeHome = $this->dashboard->getActiveHome(); $activeHome = $this->dashboard->getActiveHome();
if (count($this->dashboard->getEntries()) === 1 && $activeHome->getName() === DashboardHome::DEFAULT_HOME) { if (count($this->dashboard->getEntries()) === 1 && $activeHome->isDefaultHome()) {
$this->setAttribute('data-icinga-home', DashboardHome::DEFAULT_HOME); $this->setAttribute('data-icinga-home', DashboardHome::DEFAULT_HOME);
$this->addFrom((new DashboardHomeList($activeHome))->setHeaderDisabled()); $this->addFrom((new DashboardHomeList($activeHome))->setHeaderDisabled());
} else { } else {

View File

@ -166,7 +166,10 @@
draggable : draggable, draggable : draggable,
handle : '.widget-drag-initiator', handle : '.widget-drag-initiator',
group : { name : groupName }, group : { name : groupName },
chosenClass : 'draggable-widget-chosen' chosenClass : 'draggable-widget-chosen',
onMove : function (evt, orgEvt) {
return ! evt.related.matches('[data-disable-widget-sorting]');
}
}; };
_this.Sortable.create(sortable, options); _this.Sortable.create(sortable, options);