defer rendering related/comments until user scrolls down
This commit is contained in:
parent
674fd28f2f
commit
3d352593f3
2 changed files with 51 additions and 3 deletions
44
ui/component/common/wait-until-on-page.jsx
Normal file
44
ui/component/common/wait-until-on-page.jsx
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
// @flow
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
children: any,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function WaitUntilOnPage(props: Props) {
|
||||||
|
const ref = React.useRef();
|
||||||
|
const [shouldRender, setShouldRender] = React.useState(false);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
function handleDisplayingRef() {
|
||||||
|
const element = ref && ref.current;
|
||||||
|
if (element) {
|
||||||
|
const bounding = element.getBoundingClientRect();
|
||||||
|
if (
|
||||||
|
bounding.top >= 0 &&
|
||||||
|
bounding.left >= 0 &&
|
||||||
|
// $FlowFixMe
|
||||||
|
bounding.right <= (window.innerWidth || document.documentElement.clientWidth) &&
|
||||||
|
// $FlowFixMe
|
||||||
|
bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight)
|
||||||
|
) {
|
||||||
|
setShouldRender(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element && !shouldRender) {
|
||||||
|
window.addEventListener('scroll', handleDisplayingRef);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('scroll', handleDisplayingRef);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ref) {
|
||||||
|
handleDisplayingRef();
|
||||||
|
}
|
||||||
|
}, [ref, setShouldRender, shouldRender]);
|
||||||
|
|
||||||
|
return <div ref={ref}>{shouldRender && props.children}</div>;
|
||||||
|
}
|
|
@ -12,7 +12,7 @@ import Card from 'component/common/card';
|
||||||
import FileDetails from 'component/fileDetails';
|
import FileDetails from 'component/fileDetails';
|
||||||
import FileValues from 'component/fileValues';
|
import FileValues from 'component/fileValues';
|
||||||
import FileDescription from 'component/fileDescription';
|
import FileDescription from 'component/fileDescription';
|
||||||
|
import WaitUntilOnPage from 'component/common/wait-until-on-page';
|
||||||
import RecommendedContent from 'component/recommendedContent';
|
import RecommendedContent from 'component/recommendedContent';
|
||||||
import CommentsList from 'component/commentsList';
|
import CommentsList from 'component/commentsList';
|
||||||
import CommentCreate from 'component/commentCreate';
|
import CommentCreate from 'component/commentCreate';
|
||||||
|
@ -143,12 +143,16 @@ class FilePage extends React.Component<Props> {
|
||||||
actions={
|
actions={
|
||||||
<div>
|
<div>
|
||||||
<CommentCreate uri={uri} />
|
<CommentCreate uri={uri} />
|
||||||
|
<WaitUntilOnPage>
|
||||||
<CommentsList uri={uri} />
|
<CommentsList uri={uri} />
|
||||||
|
</WaitUntilOnPage>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<WaitUntilOnPage>
|
||||||
<RecommendedContent uri={uri} />
|
<RecommendedContent uri={uri} />
|
||||||
|
</WaitUntilOnPage>
|
||||||
</div>
|
</div>
|
||||||
</Page>
|
</Page>
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue