<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ashim Shrestha</title>
    <description>The latest articles on DEV Community by Ashim Shrestha (@ashim_shrestha).</description>
    <link>https://dev.to/ashim_shrestha</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F849190%2F02f4b9b1-28e8-4fff-8498-b83754b659e6.png</url>
      <title>DEV Community: Ashim Shrestha</title>
      <link>https://dev.to/ashim_shrestha</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashim_shrestha"/>
    <language>en</language>
    <item>
      <title>How to create pagination in NextJs for large number of pages?</title>
      <dc:creator>Ashim Shrestha</dc:creator>
      <pubDate>Mon, 18 Apr 2022 04:13:03 +0000</pubDate>
      <link>https://dev.to/ashim_shrestha/how-to-create-pagination-in-nextjs-for-large-number-of-pages-37km</link>
      <guid>https://dev.to/ashim_shrestha/how-to-create-pagination-in-nextjs-for-large-number-of-pages-37km</guid>
      <description>&lt;p&gt;Hello everyone.&lt;br&gt;
This is my first post.&lt;/p&gt;

&lt;p&gt;This was a specific problem that I faced while trying to clone a manga page. I wanted to create a pagination navigator which looked like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;First Prev ... 21 22 23 24 25 26 27 28 29 30 31 ... Next Last
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;where current page is 26.&lt;/p&gt;

&lt;p&gt;The simplest way I have found to achieve this in NextJs is by&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var total_pages = 50
var current_page = 25
var page_holder = [];

  for (var i = current_page - 5; i &amp;lt;= parseInt(current_page )+ 5 ; i++) {
      if (i &amp;gt; 0 &amp;amp;&amp;amp; i &amp;lt;= total_pages) {
        page_holder.push(i);
      }
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we are starting with empty array which is all the page rendered in the page. Then we are getting page number starting 5 page before current to 5 page after current page.&lt;/p&gt;

&lt;p&gt;Then we are checking if the number is negative or greater than total page to avoid non-existing page number.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use parseInt() to make sure that math is done correctly. If current_page is 5, then current_page + 5 might return 55 instead of 10 when parseInt isn't used&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then to render the pagination&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am using tailwind to style the component.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return (
&amp;lt;div className='flex flex-row flex-wrap justify-center'&amp;gt;
            &amp;lt;Link href={`/page=1`}&amp;gt;
                &amp;lt;a className={`w-8 text-center justify-center rounded-xl border-2 border-slate-500
            align-middle m-1 p-1 ${!(page == 1) ? 'visible' : 'hidden'}`}
                &amp;gt;
                    First
                &amp;lt;/a&amp;gt;
            &amp;lt;/Link&amp;gt;
            &amp;lt;Link href={`/page=${page - 1}`}&amp;gt;
                &amp;lt;a className={`w-8 text-center justify-center  rounded-xl border-2 border-slate-500
            align-middle m-1 p-1 ${!(page == 1) ? 'visible' : 'hidden'}`}
                &amp;gt;
                    Prev
                &amp;lt;/a&amp;gt;
            &amp;lt;/Link&amp;gt;
            {pagesAll.map((val, i) =&amp;gt; {
                return (
                    &amp;lt;Link key={i} href={`/page=${val}`}&amp;gt;
                        &amp;lt;a
                            className={`min-w-[2rem] text-center justify-center ${
                                val == page
                                    ? 'bg-slate-500'
                                    : 'border-2 border-slate-500'
                            } rounded-xl align-middle m-1 p-1`}
                        &amp;gt;
                            {val}
                        &amp;lt;/a&amp;gt;
                    &amp;lt;/Link&amp;gt;
                );
            })}

            &amp;lt;Link href={`/page=${parseInt(page) + 1}`}&amp;gt;
                &amp;lt;a className={`w-8 text-center justify-center  rounded-xl border-2 border-slate-500
            align-middle m-1 p-1 ${!(page == total_pages) ? 'visible' : 'hidden'}`}
                &amp;gt;
                    Next
                &amp;lt;/a&amp;gt;
            &amp;lt;/Link&amp;gt;
            &amp;lt;Link href={`/page=${total_pages}`}&amp;gt;
                &amp;lt;a className={`w-8 text-center justify-center border-2 border-slate-500 rounded-xl
            align-middle m-1 p-1 ${!(page == total_pages) ? 'visible' : 'hidden'}`}
                &amp;gt;
                    Last
                &amp;lt;/a&amp;gt;
            &amp;lt;/Link&amp;gt;
        &amp;lt;/div&amp;gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, we are using condition to render &lt;code&gt;First&lt;/code&gt;, &lt;code&gt;Prev&lt;/code&gt;, &lt;code&gt;Next&lt;/code&gt; and &lt;code&gt;Last&lt;/code&gt; button.&lt;/p&gt;

&lt;p&gt;The final code would look like the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8d6yg8l52u2q4ybjlv7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8d6yg8l52u2q4ybjlv7.png" alt="Full code Image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The final product would look like following:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8possl6na2zdpnio1psp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8possl6na2zdpnio1psp.png" alt="When current page is first page"&gt;&lt;/a&gt;&lt;br&gt;
&lt;code&gt;When current page is first page&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75wsw2v8y11utcexsg2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75wsw2v8y11utcexsg2w.png" alt="When current page is 25"&gt;&lt;/a&gt;&lt;br&gt;
&lt;code&gt;When current page is 25&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vhi2ivmnb9er82nhw5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vhi2ivmnb9er82nhw5j.png" alt="When current page is 35"&gt;&lt;/a&gt;&lt;br&gt;
&lt;code&gt;When current page is 35&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt49rsvce8qsi2cz2t29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt49rsvce8qsi2cz2t29.png" alt="When current page is last page"&gt;&lt;/a&gt;&lt;br&gt;
&lt;code&gt;When current page is last page&lt;/code&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
