snort/packages/app/src/Element/LoadMore.tsx

38 lines
856 B
TypeScript
Raw Normal View History

2023-01-22 11:17:50 +00:00
import { useEffect, useState } from "react";
2023-02-08 21:10:26 +00:00
import { FormattedMessage } from "react-intl";
2023-01-17 17:13:22 +00:00
import { useInView } from "react-intersection-observer";
2023-02-08 21:10:26 +00:00
import messages from "./messages";
export default function LoadMore({
onLoadMore,
shouldLoadMore,
children,
}: {
onLoadMore: () => void;
shouldLoadMore: boolean;
children?: React.ReactNode;
}) {
const { ref, inView } = useInView();
const [tick, setTick] = useState<number>(0);
2023-01-17 17:13:22 +00:00
useEffect(() => {
if (inView === true && shouldLoadMore === true) {
onLoadMore();
}
}, [inView, shouldLoadMore, tick]);
2023-01-22 11:17:50 +00:00
useEffect(() => {
2023-02-07 19:47:57 +00:00
const t = setInterval(() => {
2023-02-09 12:26:54 +00:00
setTick(x => (x += 1));
}, 500);
return () => clearInterval(t);
}, []);
2023-01-22 11:17:50 +00:00
return (
<div ref={ref} className="mb10">
2023-02-08 21:10:26 +00:00
{children ?? <FormattedMessage {...messages.Loading} />}
</div>
);
}