implement infinite scroll to avoid rendering the whole list always