diff --git a/app/scenes/Document/components/DataLoader.js b/app/scenes/Document/components/DataLoader.js index cb28a8d3..0d98ac9e 100644 --- a/app/scenes/Document/components/DataLoader.js +++ b/app/scenes/Document/components/DataLoader.js @@ -1,5 +1,6 @@ // @flow import * as React from 'react'; +import invariant from 'invariant'; import { withRouter } from 'react-router-dom'; import type { Location, RouterHistory } from 'react-router-dom'; import { observable } from 'mobx'; @@ -73,10 +74,26 @@ class DataLoader extends React.Component { onSearchLink = async (term: string) => { const results = await this.props.documents.search(term); - return results.map((result, index) => ({ - title: result.document.title, - url: result.document.url, - })); + return results + .filter(result => result.document.title) + .map((result, index) => ({ + title: result.document.title, + url: result.document.url, + })); + }; + + onCreateLink = async (title: string) => { + const document = this.document; + invariant(document, 'document must be loaded to create link'); + + const newDocument = await this.props.documents.create({ + collectionId: document.collectionId, + parentDocumentId: document.parentDocumentId, + title, + text: '', + }); + + return newDocument.url; }; loadRevision = async () => { @@ -165,6 +182,7 @@ class DataLoader extends React.Component { location={location} readOnly={!this.isEditing} onSearchLink={this.onSearchLink} + onCreateLink={this.onCreateLink} /> ); diff --git a/app/scenes/Document/components/Document.js b/app/scenes/Document/components/Document.js index da1a6855..39f8d23d 100644 --- a/app/scenes/Document/components/Document.js +++ b/app/scenes/Document/components/Document.js @@ -58,7 +58,8 @@ type Props = { document: Document, revision: Revision, readOnly: boolean, - onSearchLink: (term: string) => mixed, + onCreateLink: (title: string) => string, + onSearchLink: (term: string) => any, theme: Object, auth: AuthStore, ui: UiStore, @@ -435,6 +436,7 @@ class DocumentScene extends React.Component { onImageUploadStart={this.onImageUploadStart} onImageUploadStop={this.onImageUploadStop} onSearchLink={this.props.onSearchLink} + onCreateLink={this.props.onCreateLink} onChangeTitle={this.onChangeTitle} onChange={this.onChange} onSave={this.onSave} @@ -491,7 +493,5 @@ const MaxWidth = styled(Flex)` `; export default withRouter( - inject('ui', 'auth', 'documents', 'policies', 'revisions')( - withTheme(DocumentScene) - ) + inject('ui', 'auth', 'policies', 'revisions')(withTheme(DocumentScene)) ); diff --git a/package.json b/package.json index a066166f..4dbdd40f 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,7 @@ "react-portal": "^4.0.0", "react-router-dom": "^5.1.2", "react-waypoint": "^9.0.2", - "rich-markdown-editor": "^10.0.3-1", + "rich-markdown-editor": "^10.1.0-3", "sequelize": "^5.21.1", "sequelize-cli": "^5.5.0", "sequelize-encrypted": "^0.1.0", @@ -191,4 +191,4 @@ "js-yaml": "^3.13.1" }, "version": "0.18.0" -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 17ab9bac..ffc0b86b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8595,10 +8595,10 @@ retry-as-promised@^3.2.0: dependencies: any-promise "^1.3.0" -rich-markdown-editor@^10.0.3-1: - version "10.0.3-1" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-10.0.3-1.tgz#a0a07900d2c4c37b4f017382c22a9937f7e90e2a" - integrity sha512-p59ydbcmQbz2coeDa1LMnZcm0UtAG3d5FExbmLFue85mBZKqrMyQMo0LokW7MZoXTw0KeIvUeFM8inKYc8qdaA== +rich-markdown-editor@^10.1.0-3: + version "10.1.0-3" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-10.1.0-3.tgz#e11cfb073419c9f8275d10d2d826e1421c8873c3" + integrity sha512-kFw8l/urOHbdjrMGKO/vp+46CY1hGy983fwJz8ZmiIo5LNRby2Mkgt7rYdiysujNclKJ9hVqcawxh3aK8GN7Xw== dependencies: copy-to-clipboard "^3.0.8" lodash "^4.17.11"