LazyRenderable.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace Dcat\Admin\Grid;
  3. use Dcat\Admin\Grid;
  4. use Dcat\Admin\Support\LazyRenderable as Renderable;
  5. abstract class LazyRenderable extends Renderable
  6. {
  7. /**
  8. * 是否启用简化模式.
  9. *
  10. * @var bool
  11. */
  12. protected $simple = false;
  13. /**
  14. * 创建表格.
  15. *
  16. * @return Grid
  17. */
  18. abstract public function grid(): Grid;
  19. /**
  20. * {@inheritdoc}
  21. */
  22. public function render()
  23. {
  24. $class = $this->allowSimpleMode() ? 'simple-grid' : null;
  25. return <<<HTML
  26. <div class="$class">{$this->prepare($this->grid())->render()}</div>
  27. HTML;
  28. }
  29. /**
  30. * 是否启用简化模式.
  31. *
  32. * @param bool $value
  33. *
  34. * @return $this
  35. */
  36. public function simple(bool $value = true)
  37. {
  38. return $this->payload(['_simple_' => $value]);
  39. }
  40. /**
  41. * @param Grid $grid
  42. *
  43. * @return Grid
  44. */
  45. protected function prepare(Grid $grid)
  46. {
  47. if (! $grid->getName()) {
  48. $grid->setName($this->getDefaultName());
  49. }
  50. if ($this->allowSimpleMode()) {
  51. $grid->disableCreateButton();
  52. $grid->disablePerPages();
  53. $grid->disableBatchDelete();
  54. $grid->disableRefreshButton();
  55. $grid->filter()
  56. ->panel()
  57. ->view('admin::filter.tile-container');
  58. $grid->rowSelector()->click();
  59. }
  60. return $grid;
  61. }
  62. /**
  63. * 判断是否启用简化模式.
  64. *
  65. * @return bool
  66. */
  67. public function allowSimpleMode()
  68. {
  69. return $this->simple || $this->_simple_;
  70. }
  71. /**
  72. * 获取默认名称.
  73. *
  74. * @return string
  75. */
  76. protected function getDefaultName()
  77. {
  78. return strtolower(str_replace('\\', '-', static::class));
  79. }
  80. }