Put sidebar trees under a root node.

This commit is contained in:
Jan Böhmer 2020-10-03 13:56:30 +02:00
parent e05d707918
commit c6970505c7
5 changed files with 44 additions and 10 deletions

View file

@ -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);
}

View file

@ -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;

View file

@ -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()

View file

@ -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);
}

View file

@ -9321,5 +9321,11 @@ Element 3</target>
<target>Your password needs to be changed! Please set a new password.</target>
</segment>
</unit>
<unit id="uEMvuw8" name="tree.root_node.text">
<segment>
<source>tree.root_node.text</source>
<target>Root node</target>
</segment>
</unit>
</file>
</xliff>