Paginator.php 2.3 KB

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