diff --git a/frontend/models/Document.js b/frontend/models/Document.js
index 2755820ea..db9bd6858 100644
--- a/frontend/models/Document.js
+++ b/frontend/models/Document.js
@@ -14,6 +14,8 @@ const parseHeader = text => {
return firstLine.replace(/^#/, '').trim();
};
+const DEFAULT_TITLE = 'Untitled document';
+
class Document {
isSaving: boolean = false;
hasPendingChanges: boolean = false;
@@ -32,7 +34,7 @@ class Document {
private: boolean = false;
starred: boolean = false;
text: string = '';
- title: string = 'Untitled document';
+ title: string = '';
parentDocument: ?Document;
updatedAt: string;
updatedBy: User;
@@ -70,6 +72,14 @@ class Document {
return [];
}
+ @computed get allowSave(): boolean {
+ // Check if the document title has been modified and user generated content exists
+ return (
+ this.text.replace(new RegExp(`^\#$`), '').trim().length > 0 &&
+ !this.isSaving
+ );
+ }
+
/* Actions */
@action star = async () => {
@@ -135,6 +145,14 @@ class Document {
text: this.text,
});
} else {
+ if (!this.title) {
+ this.title = DEFAULT_TITLE;
+ this.text = this.text.replace(
+ new RegExp(`^\# `),
+ `# ${DEFAULT_TITLE}`
+ );
+ }
+
const data = {
parentDocument: undefined,
collection: this.collection.id,
diff --git a/frontend/scenes/Document/Document.js b/frontend/scenes/Document/Document.js
index 1b369a0b3..2df164ce0 100644
--- a/frontend/scenes/Document/Document.js
+++ b/frontend/scenes/Document/Document.js
@@ -70,6 +70,8 @@ type Props = {
if (props.newDocument) {
const newDocument = new Document({
collection: { id: props.match.params.id },
+ title: '',
+ text: '',
});
this.setState({ newDocument });
} else {
@@ -102,6 +104,7 @@ type Props = {
};
onSave = async (redirect: boolean = false) => {
+ if (!get(this.document, 'allowSave')) return;
let document = this.document;
if (!document) return;
@@ -218,7 +221,7 @@ type Props = {
?
: Edit}