Expand.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Dcat\Admin\Grid\Displayers;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Contracts\LazyRenderable;
  5. use Dcat\Admin\Support\Helper;
  6. use Illuminate\Support\Str;
  7. class Expand extends AbstractDisplayer
  8. {
  9. protected $button;
  10. protected static $counter = 0;
  11. public function button($button)
  12. {
  13. $this->button = $button;
  14. }
  15. public function display($callbackOrButton = null)
  16. {
  17. $html = $this->value;
  18. $remoteUrl = '';
  19. if ($callbackOrButton && $callbackOrButton instanceof \Closure) {
  20. $callbackOrButton = $callbackOrButton->call($this->row, $this);
  21. if (! $callbackOrButton instanceof LazyRenderable) {
  22. $html = Helper::render($callbackOrButton);
  23. $callbackOrButton = null;
  24. }
  25. }
  26. if ($callbackOrButton instanceof LazyRenderable) {
  27. $html = '<div style="min-height: 150px"></div>';
  28. $remoteUrl = $callbackOrButton->getUrl();
  29. } elseif (is_string($callbackOrButton) && is_subclass_of($callbackOrButton, LazyRenderable::class)) {
  30. $html = '<div style="min-height: 150px"></div>';
  31. $renderable = $callbackOrButton::make();
  32. $remoteUrl = $renderable->getUrl();
  33. } elseif ($callbackOrButton && is_string($callbackOrButton)) {
  34. $this->button = $callbackOrButton;
  35. }
  36. $button = is_null($this->button) ? $this->value : $this->button;
  37. return Admin::view('admin::grid.displayer.expand', [
  38. 'key' => $this->getKey(),
  39. 'url' => $remoteUrl,
  40. 'button' => $button,
  41. 'html' => $html,
  42. 'dataKey' => $this->getDataKey(),
  43. ]);
  44. }
  45. protected function getDataKey()
  46. {
  47. $key = $this->getKey() ?: Str::random(8);
  48. static::$counter++;
  49. return $this->grid->getName().$key.'-'.static::$counter;
  50. }
  51. }