Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3520 | Rev 3532 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useRef, useEffect } from 'react';

import { useNearScreen } from '@hooks';

import { List, Spinner } from '.';

export function InfinityList({
  items = [],
  renderItem = () => {},
  emptyMessage = 'No hay elementos para mostrar',
  keyExtractor = (item) => item.id,
  loading = false,
  hasMore = false,
  onEnd
}) {
  const loaderRef = useRef(null);

  const [isIntercepting] = useNearScreen({
    externalRef: loaderRef,
    once: false,
    rootMargin: '20px'
  });

  useEffect(() => {
    if (isIntercepting) onEnd();
  }, [isIntercepting]);

  return (
    <>
      <List
        items={items}
        emptyMessage={emptyMessage}
        keyExtractor={keyExtractor}
        renderItem={renderItem}
      />

      {hasMore && <div ref={loaderRef}>{loading && <Spinner />}</div>}
    </>
  );
}