LaravelRUS / SleepingOwlAdmin

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

Sope With Tabbed and DataTableAsync #417

Closed ghost closed 7 years ago

ghost commented 7 years ago
if (! is_null($id)) {
                $subscriptions = AdminSection::getModel(Model::class)->fireDisplay();
                $subscriptions->getScopes()->push(['withRealtor', $id]);
                $subscriptions->setParameter('realtor_id', $id);

                $tabs[] = AdminDisplay::tab($subscriptions)
                    ->setLabel(trans('back/realtor.tab.subscriptions'))
                    ->setIcon('<i class="fa fa-credit-card"></i>');
            }

В идеальных условиях этот код полностью не работает если в Model $display === DataTableAsync

Видимо обработку переданных скоупов нужно обрабатывать после того как таблица загружена.

CrazyRedScorp commented 7 years ago

Заметил такую же проблему. Разобраться самому - пока не получилось. Но боюсь эта проблема так же связана и с еще одной #424. Пока изучаю как и что попадает в /vendor/laravelrus/sleepingowl/src/Display/DisplayDatatablesAsync.php в функции public function renderAsync. Думаю что собака где то тут зарыта, но лопату надо.

ghost commented 7 years ago

Проблема в следующем - FireDisplay это генерация datatables, а асинк запрос уходит уже без всяких скоупов естественно - то бишь инстанс приложения прерывается - что делать пока не знаю - но думаю что разберусь. @CrazyRedScorp

ghost commented 7 years ago

Если мы используем такой код. То он будет работать с async

//// OnEdit
if(!is_null($id)){
        $contacts = AdminSection::getModel(Contact::class)->fireDisplay(['scopes' => ['withBusiness', $id]]);

        $tabs[] = AdminDisplay::tab($contacts)
                    ->setLabel("Contacts")
                    ->setIcon('<i class="fa fa-credit-card"></i>');
}

В секции должно быть что то типо

public function onDisplay($scopes = [])
{

        $display = AdminDisplay::datatablesAsync()->paginate(10);
        if($scopes){
              $display->getScopes()->push($scopes);
        }
}