orm icon indicating copy to clipboard operation
orm copied to clipboard

Display Pagination Links

Open ghost opened this issue 4 years ago • 5 comments

One of the most important parts of any framework is pagination. Masonite seems to be very much inspired by the Laravel Framework. So I did try to display pagination with {{ collection.links() }}, sadly this does not work.

Am I missing something or this feature has not been added yet?

ghost avatar Aug 25 '20 18:08 ghost

This feature has not been added yet. I will move this over to the ORM repo and see if we can add it there

josephmancuso avatar Sep 09 '20 00:09 josephmancuso

Pagination is done but we still need to add links. I'm not sure how this should be done yet. We might have to extend this in Masonite itself. The way Laravel does it is it actually returns the contents of a view instead of HTML.

josephmancuso avatar Oct 25 '20 21:10 josephmancuso

Yes I have looked into this and we need to add stuff in Masonite itself, I could try to do it 😉

girardinsamuel avatar Oct 25 '20 22:10 girardinsamuel

This should used predefined snippets as well as be able to register a new HTML snippet:

This is for bootstrap:

<nav aria-label="Page navigation example">
  <ul class="pagination">
    <li class="page-item"><a class="page-link" href="#">Previous</a></li>
    <li class="page-item"><a class="page-link" href="#">1</a></li>
    <li class="page-item"><a class="page-link" href="#">2</a></li>
    <li class="page-item"><a class="page-link" href="#">3</a></li>
    <li class="page-item"><a class="page-link" href="#">Next</a></li>
  </ul>
</nav>

And tailwind:

<nav class="relative z-0 inline-flex shadow-sm -space-x-px" aria-label="Pagination">
        <a href="#" class="relative inline-flex items-center px-2 py-2 rounded-l-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
          <span class="sr-only">Previous</span>
          <!-- Heroicon name: chevron-left -->
          <svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
            <path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" />
          </svg>
        </a>
        <a href="#" class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50">
          1
        </a>
        <a href="#" class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50">
          2
        </a>
        <a href="#" class="hidden md:inline-flex relative items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50">
          3
        </a>
        <span class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700">
          ...
        </span>
        <a href="#" class="hidden md:inline-flex relative items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50">
          8
        </a>
        <a href="#" class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50">
          9
        </a>
        <a href="#" class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50">
          10
        </a>
        <a href="#" class="relative inline-flex items-center px-2 py-2 rounded-r-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
          <span class="sr-only">Next</span>
          <!-- Heroicon name: chevron-right -->
          <svg class="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
            <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd" />
          </svg>
        </a>
      </nav>

We should also be able to register a new snippet from view in Masonite.

Something like:

Pagination.register_links('bulma', view.render('custom-pagination-links'))

josephmancuso avatar Jan 16 '21 15:01 josephmancuso

This could also be done possibly on the connection resolver class. Something like:

self.application.make("resolver").register_links(
    bulma, 
    lambda collection: vendor.render('custom-pagination-links', collection)
)

I think we would have to specify a function or something so it will be called when you call the links on the collection so it will render in real time

josephmancuso avatar Jun 25 '22 11:06 josephmancuso