diff --git a/frontend/src/Call/CallPlayer.js b/frontend/src/Call/CallPlayer.js index 7ea7721..bc635d7 100644 --- a/frontend/src/Call/CallPlayer.js +++ b/frontend/src/Call/CallPlayer.js @@ -5,7 +5,6 @@ import SupportModal from "./components/SupportModal"; import CallInfo from "./components/CallInfo"; import ListCalls from "./components/ListCalls"; import { useSelector, useDispatch } from 'react-redux' -import { getOlderCalls, getNewerCalls } from "../features/calls/callsSlice"; import { useGetTalkgroupsQuery } from '../features/api/apiSlice' import { useInView } from 'react-intersection-observer'; import { @@ -32,6 +31,8 @@ function CallPlayer(props) { const { shortName } = useParams(); const selectCallId = props.selectCallId; const callsData = props.callsData; + const handleNewer = props.handleNewer; + const handleOlder = props.handleOlder; const { ref: loadOlderRef, inView: loadOlderInView } = useInView({ /* Optional options */ threshold: 0.5 @@ -92,15 +93,15 @@ function CallPlayer(props) { } useEffect(() => { - if (loadNewerInView && !live && callsData && (callsData.ids.length > 0)) { - dispatch(getNewerCalls({})); + if (loadNewerInView && callsData && (callsData.ids.length > 0)) { + handleNewer(); } }, [loadNewerInView]); useEffect(() => { if (loadOlderInView && callsData && (callsData.ids.length > 0)) { - dispatch(getOlderCalls({})); + handleOlder(); } }, [loadOlderInView]); diff --git a/frontend/src/Call/Calls.js b/frontend/src/Call/Calls.js index 30813f6..3d2ab45 100644 --- a/frontend/src/Call/Calls.js +++ b/frontend/src/Call/Calls.js @@ -6,7 +6,7 @@ import CalendarModal from "./components/CalendarModal"; import CallPlayer from "./CallPlayer"; import { useSelector, useDispatch } from 'react-redux' import { setLive, setFilter, setDateFilter } from "../features/callPlayer/callPlayerSlice"; -import { getCalls, addCall } from "../features/calls/callsSlice"; +import { getCalls, addCall, getOlderCalls, getNewerCalls } from "../features/calls/callsSlice"; import { useGetGroupsQuery, useGetTalkgroupsQuery } from '../features/api/apiSlice' import { @@ -107,7 +107,7 @@ function Calls(props) { case 'calls': if (positionRef.current) { - pageYOffset.current = positionRef.current.clientHeight; + pageYOffset.current = {direction: "top", position: positionRef.current.clientHeight}; } setSelectCallId(message._id); dispatch(addCall(message)); @@ -195,6 +195,34 @@ function Calls(props) { } +const handleNewer = () => { + if (positionRef.current && !live) { + pageYOffset.current = {direction: "top", position: positionRef.current.clientHeight}; + } + dispatch(getNewerCalls({})); +} + +const handleOlder = () => { + if (positionRef.current) { + pageYOffset.current = {direction: "bottom", position: positionRef.current.clientHeight}; + } + dispatch(getOlderCalls({})); +} + +useLayoutEffect(() => { + if (pageYOffset.current) { + const scrollAmount = parseInt(positionRef.current.clientHeight) - parseInt(pageYOffset.current.position); + if (pageYOffset.current.direction == "top") { + window.scrollBy(0, scrollAmount); + } else { + //window.scrollBy(0, -1 * scrollAmount); + } + } +}, [callsData]) + + + + const setStateFromUri = async () => { let filter = { filterDate: false, @@ -307,12 +335,6 @@ function Calls(props) { - useLayoutEffect(() => { - const scrollAmount = parseInt(positionRef.current.clientHeight) - parseInt(pageYOffset.current); - - window.scrollBy(0, scrollAmount); - - }, [callsData]) let archiveLabel = ""; @@ -381,7 +403,7 @@ function Calls(props) { - + ); }