Paginator.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace Dcat\Admin\Grid\Tools;
  3. use Dcat\Admin\Grid;
  4. use Dcat\Admin\Support\Helper;
  5. use Dcat\Admin\Widgets\Color;
  6. use Illuminate\Contracts\Support\Renderable;
  7. use Illuminate\Pagination\LengthAwarePaginator;
  8. class Paginator implements Renderable
  9. {
  10. /**
  11. * @var Grid
  12. */
  13. protected $grid;
  14. /**
  15. * @var \Illuminate\Pagination\LengthAwarePaginator
  16. */
  17. protected $paginator = null;
  18. /**
  19. * Create a new Paginator instance.
  20. *
  21. * @param Grid $grid
  22. */
  23. public function __construct(Grid $grid)
  24. {
  25. $this->grid = $grid;
  26. $this->initPaginator();
  27. }
  28. /**
  29. * Initialize work for Paginator.
  30. *
  31. * @return void
  32. */
  33. protected function initPaginator()
  34. {
  35. $this->paginator = $this->grid->model()->paginator();
  36. if ($this->paginator instanceof LengthAwarePaginator) {
  37. $this->paginator->appends(request()->all());
  38. }
  39. }
  40. /**
  41. * Get Pagination links.
  42. *
  43. * @return string
  44. */
  45. protected function paginationLinks()
  46. {
  47. return $this->paginator->render('admin::pagination');
  48. }
  49. /**
  50. * Get per-page selector.
  51. *
  52. * @return PerPageSelector|null
  53. */
  54. protected function perPageSelector()
  55. {
  56. if (! $this->grid->getPerPages()) {
  57. return;
  58. }
  59. return (new PerPageSelector($this->grid))->render();
  60. }
  61. /**
  62. * Get range infomation of paginator.
  63. *
  64. * @return string|\Symfony\Component\Translation\TranslatorInterface
  65. */
  66. protected function paginationRanger()
  67. {
  68. $parameters = [
  69. 'first' => $this->paginator->firstItem(),
  70. 'last' => $this->paginator->lastItem(),
  71. 'total' => $this->paginator->total(),
  72. ];
  73. $parameters = collect($parameters)->flatMap(function ($parameter, $key) {
  74. return [$key => "<b>$parameter</b>"];
  75. });
  76. $color = Color::dark80();
  77. return "<span style=\"line-height:33px;color:{$color}\">".trans('admin.pagination.range', $parameters->all()).'</span>';
  78. }
  79. /**
  80. * Render Paginator.
  81. *
  82. * @return string
  83. */
  84. public function render()
  85. {
  86. return $this->paginationRanger().
  87. $this->paginationLinks().
  88. $this->perPageSelector();
  89. }
  90. public function __toString()
  91. {
  92. return Helper::render($this->render());
  93. }
  94. }