From ca46ca2f06cc86ae3d22cce8815b92a53218445f Mon Sep 17 00:00:00 2001 From: Jori Lallo Date: Sun, 22 Oct 2017 11:02:05 -0700 Subject: [PATCH] Added predictive document title --- frontend/scenes/Document/Document.js | 10 ++++++++-- frontend/stores/CollectionsStore.js | 14 ++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/frontend/scenes/Document/Document.js b/frontend/scenes/Document/Document.js index 371765cd9..d290ad791 100644 --- a/frontend/scenes/Document/Document.js +++ b/frontend/scenes/Document/Document.js @@ -22,6 +22,7 @@ import Document from 'models/Document'; import DocumentMove from './components/DocumentMove'; import UiStore from 'stores/UiStore'; import DocumentsStore from 'stores/DocumentsStore'; +import CollectionsStore from 'stores/CollectionsStore'; import DocumentMenu from 'menus/DocumentMenu'; import SaveAction from './components/SaveAction'; import LoadingPlaceholder from 'components/LoadingPlaceholder'; @@ -45,6 +46,7 @@ type Props = { location: Object, keydown: Object, documents: DocumentsStore, + collections: CollectionsStore, newDocument?: boolean, ui: UiStore, }; @@ -213,7 +215,9 @@ type Props = { const isMoving = this.props.match.path === matchDocumentMove; const document = this.document; const isFetching = !document; - const titleText = get(document, 'title', ''); + const titleText = + get(document, 'title', '') || + this.props.collections.titleForDocument(this.props.location.pathname); if (this.notFound) { return this.renderNotFound(); @@ -362,4 +366,6 @@ const StyledDropToImport = styled(DropToImport)` flex: 1; `; -export default withRouter(inject('ui', 'user', 'documents')(DocumentScene)); +export default withRouter( + inject('ui', 'user', 'documents', 'collections')(DocumentScene) +); diff --git a/frontend/stores/CollectionsStore.js b/frontend/stores/CollectionsStore.js index 6b5d2d997..891206c19 100644 --- a/frontend/stores/CollectionsStore.js +++ b/frontend/stores/CollectionsStore.js @@ -25,6 +25,7 @@ type Options = { type DocumentPathItem = { id: string, title: string, + url: string, type: 'document' | 'collection', }; @@ -59,16 +60,16 @@ class CollectionsStore { let results = []; const travelDocuments = (documentList, path) => documentList.forEach(document => { - const { id, title } = document; - const node = { id, title, type: 'document' }; + const { id, title, url } = document; + const node = { id, title, url, type: 'document' }; results.push(_.concat(path, node)); travelDocuments(document.children, _.concat(path, [node])); }); if (this.isLoaded) { this.data.forEach(collection => { - const { id, name } = collection; - const node = { id, title: name, type: 'collection' }; + const { id, name, url } = collection; + const node = { id, title: name, url, type: 'collection' }; results.push([node]); travelDocuments(collection.documents, [node]); }); @@ -87,6 +88,11 @@ class CollectionsStore { return this.pathsToDocuments.find(path => path.id === documentId); } + titleForDocument(documentUrl: string): ?string { + const path = this.pathsToDocuments.find(path => path.url === documentUrl); + if (path) return path.title; + } + /* Actions */ @action fetchAll = async (): Promise<*> => {