Поле с модалкой

Поле с модалкой

Danil Shutsky
Danil Shutsky
23.07.2023 в 14:36

Всем привет! Пример с полем, которое ничего не сохраняет но выводит кнопку с модальным окном в MoonShine. Может потребоваться если необходимо вывести дополнительную информацию. В примере использую просто вывод ID текущей записи, но логика получения данных может строится как в самом поле, так и через дополнительный blade компонент или же асинхронным запросом в js

Само поле выглядит простым, мы указали вьюху и также ее используем для индексной страницы и заблокировали процессы сохранения и вывода в экспорте

<?php

declare(strict_types=1);

namespace App\MoonShine\Fields;

use Illuminate\Database\Eloquent\Model;
use MoonShine\Fields\Field;

final class ModalInfoField extends Field
{
    protected static string $view = 'moonshine.fields.modal-info';

    public function indexViewValue(Model $item, bool $container = true): string
    {
        return view($this->getView(), [
            'item' => $item,
            'resource' => $this->resource()
        ])->render();
    }

    public function save(Model $item): Model
    {
        return $item;
    }

    public function formViewValue(Model $item): mixed
    {
        return '';
    }

    public function exportViewValue(Model $item): string
    {
        return '';
    }
}

Вьюха использует UI муншайн с модальным окном

<x-moonshine::modal wide title="Title">
    <div>
        {{ $item->id }}
    div>
    <x-slot name="outerHtml">
        <x-moonshine::link @click.prevent="toggleModal;">
            Information
        x-moonshine::link>
    x-slot>
x-moonshine::modal>

Тоже самое можно было бы реализовать с помощью поля NoInput, но на мой взгляд так получилось намного лучше