diff --git a/src/Controller/TreeController.php b/src/Controller/TreeController.php
index 4c340079..b79f6994 100644
--- a/src/Controller/TreeController.php
+++ b/src/Controller/TreeController.php
@@ -84,7 +84,7 @@ class TreeController extends AbstractController
*/
public function categoryTree(?Category $category = null): JsonResponse
{
- $tree = $this->treeGenerator->getTreeView(Category::class, $category);
+ $tree = $this->treeGenerator->getTreeView(Category::class, $category, 'list_parts_root');
return new JsonResponse($tree);
}
@@ -95,7 +95,7 @@ class TreeController extends AbstractController
*/
public function footprintTree(?Footprint $footprint = null): JsonResponse
{
- $tree = $this->treeGenerator->getTreeView(Footprint::class, $footprint);
+ $tree = $this->treeGenerator->getTreeView(Footprint::class, $footprint, 'list_parts_root');
return new JsonResponse($tree);
}
@@ -106,7 +106,7 @@ class TreeController extends AbstractController
*/
public function locationTree(?Storelocation $location = null): JsonResponse
{
- $tree = $this->treeGenerator->getTreeView(Storelocation::class, $location);
+ $tree = $this->treeGenerator->getTreeView(Storelocation::class, $location, 'list_parts_root');
return new JsonResponse($tree);
}
@@ -117,7 +117,7 @@ class TreeController extends AbstractController
*/
public function manufacturerTree(?Manufacturer $manufacturer = null): JsonResponse
{
- $tree = $this->treeGenerator->getTreeView(Manufacturer::class, $manufacturer);
+ $tree = $this->treeGenerator->getTreeView(Manufacturer::class, $manufacturer, 'list_parts_root');
return new JsonResponse($tree);
}
@@ -128,7 +128,7 @@ class TreeController extends AbstractController
*/
public function supplierTree(?Supplier $supplier = null): JsonResponse
{
- $tree = $this->treeGenerator->getTreeView(Supplier::class, $supplier);
+ $tree = $this->treeGenerator->getTreeView(Supplier::class, $supplier, 'list_parts_root');
return new JsonResponse($tree);
}
diff --git a/src/Helpers/Trees/TreeViewNode.php b/src/Helpers/Trees/TreeViewNode.php
index a604e932..889eed97 100644
--- a/src/Helpers/Trees/TreeViewNode.php
+++ b/src/Helpers/Trees/TreeViewNode.php
@@ -204,6 +204,18 @@ final class TreeViewNode implements JsonSerializable
return $this;
}
+ public function setExpanded(?bool $selected): self
+ {
+ //Lazy loading of state, so it does not need to get serialized and transfered, when it is empty.
+ if (null === $this->state) {
+ $this->state = new TreeViewNodeState();
+ }
+
+ $this->state->setExpanded(true);
+
+ return $this;
+ }
+
public function getTags(): ?array
{
return $this->tags;
diff --git a/src/Helpers/Trees/TreeViewNodeState.php b/src/Helpers/Trees/TreeViewNodeState.php
index e61ee692..3fa33758 100644
--- a/src/Helpers/Trees/TreeViewNodeState.php
+++ b/src/Helpers/Trees/TreeViewNodeState.php
@@ -66,9 +66,10 @@ final class TreeViewNodeState implements JsonSerializable
return $this->disabled;
}
- public function setDisabled(?bool $disabled): void
+ public function setDisabled(?bool $disabled): self
{
$this->disabled = $disabled;
+ return $this;
}
public function getExpanded(): ?bool
@@ -76,9 +77,10 @@ final class TreeViewNodeState implements JsonSerializable
return $this->expanded;
}
- public function setExpanded(?bool $expanded): void
+ public function setExpanded(?bool $expanded): self
{
$this->expanded = $expanded;
+ return $this;
}
public function getSelected(): ?bool
@@ -86,9 +88,10 @@ final class TreeViewNodeState implements JsonSerializable
return $this->selected;
}
- public function setSelected(?bool $selected): void
+ public function setSelected(?bool $selected): self
{
$this->selected = $selected;
+ return $this;
}
public function jsonSerialize()
diff --git a/src/Services/Trees/TreeViewGenerator.php b/src/Services/Trees/TreeViewGenerator.php
index f44b0b98..5a25042a 100644
--- a/src/Services/Trees/TreeViewGenerator.php
+++ b/src/Services/Trees/TreeViewGenerator.php
@@ -47,6 +47,7 @@ use App\Entity\Base\AbstractNamedDBElement;
use App\Entity\Base\AbstractStructuralDBElement;
use App\Helpers\Trees\TreeViewNode;
use App\Helpers\Trees\TreeViewNodeIterator;
+use App\Helpers\Trees\TreeViewNodeState;
use App\Repository\StructuralDBElementRepository;
use App\Services\EntityURLGenerator;
use App\Services\UserCacheKeyGenerator;
@@ -84,12 +85,14 @@ class TreeViewGenerator
*
* @return TreeViewNode[] an array of TreeViewNode[] elements of the root elements
*/
- public function getTreeView(string $class, ?AbstractStructuralDBElement $parent = null, string $href_type = 'list_parts', ?AbstractDBElement $selectedElement = null): array
+ public function getTreeView(string $class, ?AbstractStructuralDBElement $parent = null, string $mode = 'list_parts', ?AbstractDBElement $selectedElement = null): array
{
$head = [];
+ $href_type = $mode;
+
//When we use the newEdit type, add the New Element node.
- if ('newEdit' === $href_type) {
+ if ('newEdit' === $mode) {
//Generate the url for the new node
$href = $this->urlGenerator->createURL(new $class());
$new_node = new TreeViewNode($this->translator->trans('entity.tree.new'), $href);
@@ -105,6 +108,10 @@ class TreeViewGenerator
$href_type = 'edit';
}
+ if ($mode === 'list_parts_root') {
+ $href_type = 'list_parts';
+ }
+
$generic = $this->getGenericTree($class, $parent);
$treeIterator = new TreeViewNodeIterator($generic);
$recursiveIterator = new \RecursiveIteratorIterator($treeIterator, \RecursiveIteratorIterator::SELF_FIRST);
@@ -129,6 +136,12 @@ class TreeViewGenerator
}
}
+ if ($mode === 'list_parts_root') {
+ $root_node = new TreeViewNode($this->translator->trans('tree.root_node.text'), null, $generic);
+ $root_node->setExpanded(true);
+ $generic = [$root_node];
+ }
+
return array_merge($head, $generic);
}
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf
index 9282133a..751ca180 100644
--- a/translations/messages.en.xlf
+++ b/translations/messages.en.xlf
@@ -9321,5 +9321,11 @@ Element 3
Your password needs to be changed! Please set a new password.
+
+
+ tree.root_node.text
+ Root node
+
+