feat: Add child document preloading

This commit is contained in:
Tom Moor
2019-12-22 17:06:39 -08:00
parent d995f27736
commit c20282de06
2 changed files with 40 additions and 5 deletions

View File

@@ -27,6 +27,20 @@ type Props = {
class DocumentLink extends React.Component<Props> {
@observable menuOpen = false;
componentDidMount() {
if (this.isActiveDocument() && this.hasChildDocuments()) {
this.props.documents.fetchChildDocuments(this.props.node.id);
}
}
componentDidUpdate(prevProps: Props) {
if (prevProps.activeDocument !== this.props.activeDocument) {
if (this.isActiveDocument() && this.hasChildDocuments()) {
this.props.documents.fetchChildDocuments(this.props.node.id);
}
}
}
handleMouseEnter = (ev: SyntheticEvent<>) => {
const { node, prefetchDocument } = this.props;
@@ -35,6 +49,17 @@ class DocumentLink extends React.Component<Props> {
prefetchDocument(node.id);
};
isActiveDocument = () => {
return (
this.props.activeDocument &&
this.props.activeDocument.id === this.props.node.id
);
};
hasChildDocuments = () => {
return !!this.props.node.children.length;
};
render() {
const {
node,
@@ -46,7 +71,6 @@ class DocumentLink extends React.Component<Props> {
depth,
} = this.props;
const isActiveDocument = activeDocument && activeDocument.id === node.id;
const showChildren = !!(
activeDocument &&
collection &&
@@ -54,16 +78,15 @@ class DocumentLink extends React.Component<Props> {
.pathToDocument(activeDocument)
.map(entry => entry.id)
.includes(node.id) ||
isActiveDocument)
this.isActiveDocument())
);
const hasChildren = !!node.children.length;
const document = documents.get(node.id);
return (
<Flex
column
key={node.id}
ref={isActiveDocument ? activeDocumentRef : undefined}
ref={this.isActiveDocument() ? activeDocumentRef : undefined}
onMouseEnter={this.handleMouseEnter}
>
<DropToImport documentId={node.id} activeClassName="activeDropZone">
@@ -92,7 +115,7 @@ class DocumentLink extends React.Component<Props> {
)
}
>
{hasChildren && (
{this.hasChildDocuments() && (
<DocumentChildren column>
{node.children.map(childNode => (
<DocumentLink