LaravelRUS / SleepingOwlAdmin

🦉 Administrative interface builder for Laravel (Laravel admin)
http://sleepingowladmin.ru/
MIT License
800 stars 216 forks source link

Возможность задавать в tree() режим collapse или expand по умолчанию для всех нод #265

Closed dronowar closed 4 years ago

dronowar commented 8 years ago

Сейчас по умолчанию все ноды expand, хотелось бы иметь возможность задавать этот параметр при конфигурации модели и способе отображения в виде tree(). А также добавить у tree() метод setColumns() для вывода там не только заголовка

butschster commented 8 years ago

Если напишешь JS код, который будет отвечать за хранение статуса дерева, то добавлю

dronowar commented 8 years ago

Готов написать на vue.js За основу возьму этот пример http://vuejs.org/examples/tree-view.html и дополню

Нужно будет чтобы backend через ajax отдавал json дерево при открытии страницы, и методы чтобы можно было сохранить измененное дерево, создать и обновить ноду

Vue и сам код можно просто подключить к шаблону, но лучше сразу использовать сборщик gulp-browserify-vueify

5 сент. 2016 г. 6:51 PM пользователь "butschster" notifications@github.com написал:

Если напишешь JS код, который будет отвечать за хранение статуса дерева, то добавлю

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/LaravelRUS/SleepingOwlAdmin/issues/265#issuecomment-244776121, or mute the thread https://github.com/notifications/unsubscribe-auth/AF36yLbnx0qcu1SGBFbPbDYXkdIFCusZks5qnDqRgaJpZM4Jw-T- .

Butochnikov commented 7 years ago

@butschster, @aios Сделал метод setCollapsed, но для корректной работы нужно править сам nestable.js, он подключается из node_modules. В этом случае, мы отключаем его в зависимостях и используем свою измененную версию. По сути это не страшно, т.к. эта либа уже 100 лет не обновлялась.

меняем?

ghost commented 7 years ago

@Butochnikov этот компонент подлежит полной переписи - так как тестировался на маленьких деревьях до 30-50 записей. У лунатика 500 и я охренел от того времени которое уходит на отрисовку всего дерева - а потом на обработку его сохранения. + дерево постоянно ломается. От этого мы тоже будем уходить. Nestable не подходит совсем.

Butochnikov commented 7 years ago

@aios у меня тоже огромные деревья + кастомный view для каждого элемента, да, медленно, но опять-таки, работает и все пользуются. Я, например, сходу не нашел готовой альтернативы работы с деревом + d&d, даже на vue, возможно плохо искал. Если новое решение будет мега отличное, то старый tree можно убить, а пока нового нет предлагаю доработать.

ghost commented 7 years ago

@Butochnikov ну я с предложением не согласен. @butschster что скажешь?

ghost commented 7 years ago

@dronowar был добавлен метод setMaxDepth в Tree посмотри чем поможет.

loginov-rocks commented 7 years ago

Как насчёт https://www.npmjs.com/package/nestable2 ?

dronowar commented 7 years ago

Наконец-то это либа стала обновляться. Альтернатив ей нормальных нет, надо брать.

12 июля 2017 г. 12:10 AM пользователь "Danila Loginov" < notifications@github.com> написал:

Как насчёт https://www.npmjs.com/package/nestable2 ?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/LaravelRUS/SleepingOwlAdmin/issues/265#issuecomment-314572872, or mute the thread https://github.com/notifications/unsubscribe-auth/AF36yJc9t3ZssAe6wwlk-TZjsEl77EyUks5sM-SogaJpZM4Jw-T- .

loginov-rocks commented 7 years ago

Какие требования?

  1. Вывести nested set в виде дерева с несколькими action кнопками
  2. Expand/collapse дочерних элементов
  3. Drag'n'drop элемента в любую часть дерева
  4. По изменению дерева, сериализовать его и отправить на эндпоинт

Сейчас дерево рендерится на сервере, что если отдавать его Vue компоненту с указанием роутов для action кнопок, а ля:

$tree = Model::getTree();
// $tree[i] = ['id' => 1, 'name' => 'Тапочки', 'children' => [...]];
<display-tree :tree={{ json_encode($tree) }}
              reorder-url="/admin/categories/reorder"
              edit-route="/admin/categories/{id}/edit"
              delete-route="/admin/categories/{id}/delete"></display-tree>

Ну а Vue компонент уже хранит дерево и рекурсивно отрисовывает его, при изменении сериализовать его в JSON не составит труда. Там уже и допилить это дело под конкретные нужды можно будет, например сделать текстовый поиск по нодам.

Единственное что придётся избавиться от блейдовских шаблонов.

У меня в админке 1092 категории на baum можно сказать валятся, на фронтенде просто скармливаю vue компоненту json_encode(Category::getNestedList('name', 'id', '>')), работает быстро.

(getNestedList использую, потому что всё равно вывожу флэт массив как опшены для селекта, ну и к стыду своему не понял как толком взять от Baum всё дерево)

default

daaner commented 5 years ago

Как сейчас обстоят дела с деревьями где много записей? Меняем либу?