DEV Community

artydev
artydev

Posted on

Paginating API experiments with Javascript's generators. Part 1/2

Just for fun I am trying to create a generic paginator in Javascript.

That is just a draft, here is the function to create a 'paginator'.

const create_paginator = function ({fetcher, viewer,items, page_size, maxitems}) {

  let offset = 0;
  let data = [];

  function fetch_data () {
    return async function* (dir) { 
        offset += 1 * dir * page_size;
        log.innerText = offset ;
        const resp = await (await fetcher(offset, page_size)).json();  
        yield resp;
    }
  }

  async function paginator (dir = 1) {
    const iterator = fetch_data (fetcher);
    if ((offset == 95 && dir == 1) || (offset == 0 && dir == -1)) return ;
    for await (const page of iterator(dir)) {
       data = Array.from (page[items]);
       viewer(data);  
    }
  }  
  return paginator;
};

Enter fullscreen mode Exit fullscreen mode

Here is the way to use it :

function viewer(data) {
  result.innerHTML = '';
  data.forEach (u => result.innerHTML += `
    <d-user>${u.firstName}</d-user>
  `);
}

const fetcher =  (offset = 0, pagesize = 0) => 
  fetch (`https://dummyjson.com/users?skip=${offset}&limit=${pagesize}`);

let showPage = create_paginator({
  fetcher,
  viewer,
  items: "users",
  page_size: 5,
  maxitems: 100
});
Enter fullscreen mode Exit fullscreen mode

I will explain the code and clean it in later posts

For now, you can play with it here : Paginator

Top comments (0)