Modal.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace Dcat\Admin\Grid\Displayers;
  3. use Dcat\Admin\Contracts\LazyRenderable;
  4. use Dcat\Admin\Support\Helper;
  5. use Dcat\Admin\Widgets\Modal as WidgetModal;
  6. class Modal extends AbstractDisplayer
  7. {
  8. protected $title;
  9. public function title(string $title)
  10. {
  11. $this->title = $title;
  12. }
  13. protected function setUpLazyRenderable(LazyRenderable $renderable)
  14. {
  15. return clone $renderable->payload(['key' => $this->getKey()]);
  16. }
  17. public function display($callback = null)
  18. {
  19. $title = $this->value ?: $this->trans('title');
  20. if (func_num_args() == 2) {
  21. [$title, $callback] = func_get_args();
  22. }
  23. $html = $this->value;
  24. if ($callback instanceof \Closure) {
  25. $callback = $callback->call($this->row, $this);
  26. if (! $callback instanceof LazyRenderable) {
  27. $html = Helper::render($callback);
  28. $callback = null;
  29. }
  30. }
  31. if ($callback && is_string($callback) && is_subclass_of($callback, LazyRenderable::class)) {
  32. $html = $this->setUpLazyRenderable($callback::make());
  33. } elseif ($callback && $callback instanceof LazyRenderable) {
  34. $html = $this->setUpLazyRenderable($callback);
  35. }
  36. $title = $this->title ?: $title;
  37. return WidgetModal::make()
  38. ->lg()
  39. ->title($title)
  40. ->body($html)
  41. ->delay(300)
  42. ->button($this->renderButton());
  43. }
  44. protected function renderButton()
  45. {
  46. return "<a href=\"javascript:void(0)\"><i class=\"fa fa-clone\"></i>&nbsp;&nbsp;{$this->value}</a>";
  47. }
  48. }