mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fixed InfiniteScroll pagination
This commit is contained in:
+23
-21
@@ -20,16 +20,14 @@ const Board = ({ setBodyStyle }) => {
|
|||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [prevScrollPos, setPrevScrollPos] = useState(0);
|
const [prevScrollPos, setPrevScrollPos] = useState(0);
|
||||||
const [visible, setVisible] = useState(true);
|
const [visible, setVisible] = useState(true);
|
||||||
const [startIndex, setStartIndex] = useState(0);
|
|
||||||
const [endIndex, setEndIndex] = useState(2);
|
const [endIndex, setEndIndex] = useState(2);
|
||||||
const [loadedFeed, setLoadedFeed] = useState([]);
|
|
||||||
const { feed, hasMore, loadMore } = useFeed([`${selectedAddress}`], 'new');
|
const { feed, hasMore, loadMore } = useFeed([`${selectedAddress}`], 'new');
|
||||||
const [selectedFeed, setSelectedFeed] = useState(feed);
|
const [selectedFeed, setSelectedFeed] = useState(feed);
|
||||||
const renderedFeed = selectedFeed.slice(startIndex, endIndex);
|
const renderedFeed = selectedFeed.slice(0, endIndex);
|
||||||
const { subplebbitAddress } = useParams();
|
const { subplebbitAddress } = useParams();
|
||||||
|
|
||||||
|
|
||||||
|
// temporary title from JSON, gets subplebbitAddress from URL
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setSelectedAddress(subplebbitAddress);
|
setSelectedAddress(subplebbitAddress);
|
||||||
const selectedSubplebbit = defaultSubplebbits.find((subplebbit) => subplebbit.address === subplebbitAddress);
|
const selectedSubplebbit = defaultSubplebbits.find((subplebbit) => subplebbit.address === subplebbitAddress);
|
||||||
@@ -38,12 +36,12 @@ const Board = ({ setBodyStyle }) => {
|
|||||||
}
|
}
|
||||||
}, [subplebbitAddress, setSelectedAddress, setSelectedTitle, defaultSubplebbits]);
|
}, [subplebbitAddress, setSelectedAddress, setSelectedTitle, defaultSubplebbits]);
|
||||||
|
|
||||||
|
// sets useFeed to address from URL
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setSelectedFeed(feed);
|
setSelectedFeed(feed);
|
||||||
}, [feed]);
|
}, [feed]);
|
||||||
|
|
||||||
|
// fetches default subplebbits from JSON
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let didCancel = false;
|
let didCancel = false;
|
||||||
fetch(
|
fetch(
|
||||||
@@ -61,7 +59,7 @@ const Board = ({ setBodyStyle }) => {
|
|||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// mobile navbar scroll effect
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleScroll = () => {
|
const handleScroll = () => {
|
||||||
const currentScrollPos = window.pageYOffset;
|
const currentScrollPos = window.pageYOffset;
|
||||||
@@ -75,14 +73,18 @@ const Board = ({ setBodyStyle }) => {
|
|||||||
return () => window.removeEventListener('scroll', handleScroll);
|
return () => window.removeEventListener('scroll', handleScroll);
|
||||||
}, [prevScrollPos, visible]);
|
}, [prevScrollPos, visible]);
|
||||||
|
|
||||||
|
// reset endIndex whenever selectedAddress changes
|
||||||
|
useEffect(() => {
|
||||||
|
setEndIndex(2);
|
||||||
|
}, [selectedAddress]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const tryLoadMore = async () => {
|
const tryLoadMore = async () => {
|
||||||
try {
|
try {
|
||||||
loadMore();
|
loadMore();
|
||||||
const newFeed = [...loadedFeed, ...feed];
|
const newFeed = [...selectedFeed, ...feed];
|
||||||
setLoadedFeed(newFeed);
|
setSelectedFeed(newFeed);
|
||||||
setStartIndex(endIndex);
|
|
||||||
setEndIndex(endIndex + 2);
|
setEndIndex(endIndex + 2);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await new Promise(resolve => setTimeout(resolve, 1000));
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||||||
@@ -165,15 +167,24 @@ const Board = ({ setBodyStyle }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const handleVoidClick = () => {}
|
const handleVoidClick = () => {};
|
||||||
|
|
||||||
|
|
||||||
|
// desktop navbar board select functionality
|
||||||
const handleClickTitle = (title, address) => {
|
const handleClickTitle = (title, address) => {
|
||||||
setSelectedTitle(title);
|
setSelectedTitle(title);
|
||||||
setSelectedAddress(address);
|
setSelectedAddress(address);
|
||||||
setSelectedFeed(feed.filter(feed => feed.title === title));
|
setSelectedFeed(feed.filter(feed => feed.title === title));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// mobile navbar board select functionality
|
||||||
|
const handleSelectChange = (event) => {
|
||||||
|
const selected = event.target.value;
|
||||||
|
const selectedTitle = defaultSubplebbits.find((subplebbit) => subplebbit.address === selected).title;
|
||||||
|
setSelectedTitle(selectedTitle);
|
||||||
|
setSelectedAddress(selected);
|
||||||
|
navigate(`/${selected}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const handleClickHelp = () => {
|
const handleClickHelp = () => {
|
||||||
alert("- The CAPTCHA loads after you click \"Post\" \n- The CAPTCHA is case-sensitive. \n- Make sure to not block any cookies set by plebchan.");
|
alert("- The CAPTCHA loads after you click \"Post\" \n- The CAPTCHA is case-sensitive. \n- Make sure to not block any cookies set by plebchan.");
|
||||||
@@ -192,15 +203,6 @@ const Board = ({ setBodyStyle }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const handleSelectChange = (event) => {
|
|
||||||
const selected = event.target.value;
|
|
||||||
const selectedTitle = defaultSubplebbits.find((subplebbit) => subplebbit.address === selected).title;
|
|
||||||
setSelectedTitle(selectedTitle);
|
|
||||||
setSelectedAddress(selected);
|
|
||||||
navigate(`/${selected}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const handlePublishComment = async () => {
|
const handlePublishComment = async () => {
|
||||||
try {
|
try {
|
||||||
const pendingComment = await publishComment({
|
const pendingComment = await publishComment({
|
||||||
|
|||||||
Reference in New Issue
Block a user