private function loadCategories()
 {
     $collection = $this->repository->matching(new Criteria());
     $collection->map(function (CategoryInterface $category) {
         $this->categories[$category->getId()] = ['name' => $category->translate()->getName(), 'route' => $this->generator->generate($category->translate()->getRoute()->getId())];
     });
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $form = $builder->init($options);
     $form->addChild($builder->getElement('tree', ['name' => 'categories', 'label' => $this->trans('Categories'), 'add_item_prompt' => $this->trans('Category name'), 'addLabel' => $this->trans('Add category'), 'sortable' => true, 'selectable' => false, 'clickable' => true, 'deletable' => true, 'addable' => true, 'prevent_duplicates' => true, 'items' => $this->repository->getTreeItems(), 'onClick' => 'openCategoryEditor', 'onDuplicate' => 'duplicateCategory', 'onSaveOrder' => 'changeOrder', 'onAdd' => 'addCategory', 'onAfterAdd' => 'openCategoryEditor', 'onDelete' => 'deleteCategory', 'onAfterDelete' => 'openCategoryEditor', 'active' => (int) $this->getRequest()->attributes->get('id')]));
     return $form;
 }
 public function sortAction(Request $request)
 {
     $items = $request->request->get('items');
     $this->repository->changeOrder($items);
     return new JsonResponse(['success' => true]);
 }