This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
outline/app/scenes/Document/components/References.js
Tom Moor 293c3b7b9c fix: Move references spacing directly below content (#1113)
* fix: Move references spacing directly below content

* Child document -> Nested document
2019-12-18 21:00:36 -08:00

84 lines
2.7 KiB
JavaScript

// @flow
import * as React from 'react';
import { observer, inject } from 'mobx-react';
import { withRouter, type Location } from 'react-router-dom';
import Fade from 'components/Fade';
import Tabs from 'components/Tabs';
import Tab from 'components/Tab';
import DocumentsStore from 'stores/DocumentsStore';
import CollectionsStore from 'stores/CollectionsStore';
import Document from 'models/Document';
import ReferenceListItem from './ReferenceListItem';
type Props = {
document: Document,
documents: DocumentsStore,
collections: CollectionsStore,
location: Location,
};
@observer
class References extends React.Component<Props> {
componentDidMount() {
this.props.documents.fetchBacklinks(this.props.document.id);
}
render() {
const { documents, collections, document } = this.props;
const backlinks = documents.getBacklinedDocuments(document.id);
const collection = collections.get(document.collectionId);
const children = collection
? collection.getDocumentChildren(document.id)
: [];
const showBacklinks = !!backlinks.length;
const showChildren = !!children.length;
const isBacklinksTab =
this.props.location.hash === '#backlinks' || !showChildren;
return (
(showBacklinks || showChildren) && (
<Fade>
<Tabs>
{showChildren && (
<Tab to="#children" isActive={() => !isBacklinksTab}>
Nested documents
</Tab>
)}
{showBacklinks && (
<Tab to="#backlinks" isActive={() => isBacklinksTab}>
References
</Tab>
)}
</Tabs>
{isBacklinksTab
? backlinks.map(backlinkedDocument => (
<ReferenceListItem
anchor={document.urlId}
key={backlinkedDocument.id}
document={backlinkedDocument}
showCollection={
backlinkedDocument.collectionId !== document.collectionId
}
/>
))
: children.map(node => {
// If we have the document in the store already then use it to get the extra
// contextual info, otherwise the collection node will do (only has title and id)
const document = documents.get(node.id);
return (
<ReferenceListItem
key={node.id}
document={document || node}
showCollection={false}
/>
);
})}
</Fade>
)
);
}
}
export default withRouter(inject('documents', 'collections')(References));