Fix status not shown if ancestors count > 40

Plus a few perf fixes
This commit is contained in:
Lim Chee Aun 2023-04-18 19:47:21 +08:00
parent 97964cff73
commit 60c635b610
2 changed files with 32 additions and 10 deletions

View file

@ -13,6 +13,7 @@ import {
Routes, Routes,
useLocation, useLocation,
useNavigate, useNavigate,
useParams,
} from 'react-router-dom'; } from 'react-router-dom';
import { useSnapshot } from 'valtio'; import { useSnapshot } from 'valtio';
@ -250,9 +251,11 @@ function App() {
<Route path="/:instance?/search" element={<Search />} /> <Route path="/:instance?/search" element={<Search />} />
{/* <Route path="/:anything" element={<NotFound />} /> */} {/* <Route path="/:anything" element={<NotFound />} /> */}
</Routes> </Routes>
<Routes> {uiState === 'default' && (
<Route path="/:instance?/s/:id" element={<Status />} /> <Routes>
</Routes> <Route path="/:instance?/s/:id" element={<StatusRoute />} />
</Routes>
)}
<div> <div>
{isLoggedIn && {isLoggedIn &&
!snapStates.settings.shortcutsColumnsMode && !snapStates.settings.shortcutsColumnsMode &&
@ -490,4 +493,10 @@ function BackgroundService({ isLoggedIn }) {
return null; return null;
} }
function StatusRoute() {
const params = useParams();
const { id, instance } = params;
return <Status id={id} instance={instance} />;
}
export { App }; export { App };

View file

@ -3,6 +3,7 @@ import './status.css';
import { Menu, MenuDivider, MenuHeader, MenuItem } from '@szhsin/react-menu'; import { Menu, MenuDivider, MenuHeader, MenuItem } from '@szhsin/react-menu';
import debounce from 'just-debounce-it'; import debounce from 'just-debounce-it';
import pRetry from 'p-retry'; import pRetry from 'p-retry';
import { memo } from 'preact/compat';
import { import {
useCallback, useCallback,
useEffect, useEffect,
@ -50,8 +51,8 @@ function resetScrollPosition(id) {
delete states.scrollPositions[id]; delete states.scrollPositions[id];
} }
function StatusPage() { function StatusPage(params) {
const { id, ...params } = useParams(); const { id } = params;
const { masto, instance } = api({ instance: params.instance }); const { masto, instance } = api({ instance: params.instance });
const [searchParams, setSearchParams] = useSearchParams(); const [searchParams, setSearchParams] = useSearchParams();
const mediaParam = searchParams.get('media'); const mediaParam = searchParams.get('media');
@ -127,18 +128,23 @@ function StatusPage() {
) : ( ) : (
<Link to={closeLink} /> <Link to={closeLink} />
)} )}
{!showMediaOnly && <StatusThread closeLink={closeLink} />} {!showMediaOnly && (
<StatusThread
id={id}
instance={params.instance}
closeLink={closeLink}
/>
)}
</div> </div>
); );
} }
function StatusThread({ closeLink = '/' }) { function StatusThread({ id, closeLink = '/', instance: propInstance }) {
const { id, ...params } = useParams();
const [searchParams, setSearchParams] = useSearchParams(); const [searchParams, setSearchParams] = useSearchParams();
const mediaParam = searchParams.get('media'); const mediaParam = searchParams.get('media');
const showMedia = parseInt(mediaParam, 10) > 0; const showMedia = parseInt(mediaParam, 10) > 0;
const [viewMode, setViewMode] = useState(searchParams.get('view')); const [viewMode, setViewMode] = useState(searchParams.get('view'));
const { masto, instance } = api({ instance: params.instance }); const { masto, instance } = api({ instance: propInstance });
const { const {
masto: currentMasto, masto: currentMasto,
instance: currentInstance, instance: currentInstance,
@ -308,6 +314,13 @@ function StatusThread({ closeLink = '/' }) {
offsetTop: heroStatusRef.current?.offsetTop, offsetTop: heroStatusRef.current?.offsetTop,
scrollTop: scrollableRef.current?.scrollTop, scrollTop: scrollableRef.current?.scrollTop,
}; };
// Set limit to hero's index
const heroLimit = allStatuses.findIndex((s) => s.id === id);
if (heroLimit >= limit) {
setLimit(heroLimit + 1);
}
console.log({ allStatuses }); console.log({ allStatuses });
setStatuses(allStatuses); setStatuses(allStatuses);
cachedStatusesMap[id] = allStatuses; cachedStatusesMap[id] = allStatuses;
@ -1100,4 +1113,4 @@ function SubComments({
); );
} }
export default StatusPage; export default memo(StatusPage);