diff --git a/notes-service/src/main/java/io/meeds/notes/rest/model/PageEntity.java b/notes-service/src/main/java/io/meeds/notes/rest/model/PageEntity.java index 1085dc6ca..aaaa3a136 100644 --- a/notes-service/src/main/java/io/meeds/notes/rest/model/PageEntity.java +++ b/notes-service/src/main/java/io/meeds/notes/rest/model/PageEntity.java @@ -44,4 +44,6 @@ public class PageEntity implements Serializable { private String lang; private PagePropertiesEntity properties; + + private boolean extensionDataUpdated; } diff --git a/notes-service/src/main/java/org/exoplatform/wiki/model/Page.java b/notes-service/src/main/java/org/exoplatform/wiki/model/Page.java index e96fddb8a..feeacb60a 100644 --- a/notes-service/src/main/java/org/exoplatform/wiki/model/Page.java +++ b/notes-service/src/main/java/org/exoplatform/wiki/model/Page.java @@ -107,6 +107,7 @@ public class Page { private NotePageProperties properties; + public Page(String name) { this.name = name; } diff --git a/notes-service/src/main/java/org/exoplatform/wiki/service/rest/NotesRestService.java b/notes-service/src/main/java/org/exoplatform/wiki/service/rest/NotesRestService.java index c4e81abaa..3c78e3835 100644 --- a/notes-service/src/main/java/org/exoplatform/wiki/service/rest/NotesRestService.java +++ b/notes-service/src/main/java/org/exoplatform/wiki/service/rest/NotesRestService.java @@ -824,8 +824,15 @@ public Response updateNoteById(@Parameter(description = "Note id", required = tr WikiPageParams noteParams = new WikiPageParams(note_.getWikiType(), note_.getWikiOwner(), newNoteName); noteService.removeDraftOfNote(noteParams, note.getLang()); } - } else if (note_.isToBePublished()){ - note_ = noteService.updateNote(note_, PageUpdateType.PUBLISH, identity); + } else if (note_.isToBePublished()) { + note_ = noteService.updateNote(note_, PageUpdateType.PUBLISH, identity); + } else if (note.isExtensionDataUpdated()) { + note_ = noteService.updateNote(note_, PageUpdateType.EDIT_PAGE_CONTENT_AND_TITLE, identity); + noteService.createVersionOfNote(note_, identity.getUserId()); + if (!Utils.ANONYM_IDENTITY.equals(identity.getUserId())) { + WikiPageParams noteParams = new WikiPageParams(note_.getWikiType(), note_.getWikiOwner(), newNoteName); + noteService.removeDraftOfNote(noteParams, note.getLang()); + } } else { // in this case, the note didnt change on title nor content. As we need the page // url in front side, we compute it here diff --git a/notes-webapp/src/main/webapp/vue-app/notes-editor/components/NotesEditorDashboard.vue b/notes-webapp/src/main/webapp/vue-app/notes-editor/components/NotesEditorDashboard.vue index 06f4e6176..5a8f2edbe 100644 --- a/notes-webapp/src/main/webapp/vue-app/notes-editor/components/NotesEditorDashboard.vue +++ b/notes-webapp/src/main/webapp/vue-app/notes-editor/components/NotesEditorDashboard.vue @@ -129,7 +129,8 @@ export default { saveButtonIcon: 'fas fa-save', translationSwitch: false, newTranslation: false, - autosaveProcessedFromEditorExtension: false + autosaveProcessedFromEditorExtension: false, + extensionDataUpdated: false }; }, computed: { @@ -252,9 +253,61 @@ export default { methods: { processAutoSaveFromEditorExtension(event) { if (event.detail.processAutoSave) { + this.extensionDataUpdated = true; this.autosaveProcessedFromEditorExtension = true; this.draftSavingStatus = this.$t('notes.draft.savingDraftStatus'); - this.persistDraftNote(this.fillDraftNote(), true); + clearTimeout(this.saveDraft); + const draftNote = this.fillDraftNote(); + if (!draftNote.title) { + draftNote.title = 'Untitled'; + } + draftNote.lang = this.selectedLanguage; + if (this.newDraft){ + draftNote.id = null; + } + if (draftNote.properties) { + draftNote.properties.draft = true; + if (this.newTranslation && !this.featuredImageUpdated) { + draftNote.properties.featuredImage = null; + } + } + this.$notesService.saveDraftNote(draftNote, this.parentPageId).then(savedDraftNote => { + this.actualNote = { + id: savedDraftNote.id, + name: savedDraftNote.name, + title: savedDraftNote.title, + content: savedDraftNote.content, + author: savedDraftNote.author, + owner: savedDraftNote.owner, + properties: savedDraftNote.properties + }; + this.newDraft=false; + savedDraftNote.parentPageId = this.parentPageId; + this.note = savedDraftNote; + localStorage.setItem(`draftNoteId-${this.note.id}-${this.selectedLanguage}`, JSON.stringify(savedDraftNote)); + this.newTranslation = false; + }).then(() => { + this.savingDraft = false; + setTimeout(() => { + this.draftSavingStatus = this.$t('notes.draft.savedDraftStatus'); + if (this.autosaveProcessedFromEditorExtension) { + document.dispatchEvent(new CustomEvent('note-draft-auto-save-done', { + detail: { + draftId: this.note.id + } + })); + } + this.autosaveProcessedFromEditorExtension = false; + }, this.autoSaveDelay); + }).catch(e => { + console.error('Error when creating draft note: ', e); + this.$root.$emit('show-alert', { + type: 'error', + message: this.$t(`notes.message.${e.message}`) + }); + }); + } else { + this.draftSavingStatus = this.$t('notes.draft.savedDraftStatus'); } }, editorClosed() { @@ -308,7 +361,8 @@ export default { parentPageId: this.note?.draftPage && this.note?.targetPageId === this.parentPageId ? null : this.parentPageId, toBePublished: false, appName: this.appName, - properties: properties + properties: properties, + extensionDataUpdated: this.extensionDataUpdated }; if (note.id) { this.updateNote(note); @@ -341,6 +395,7 @@ export default { }).finally(() => { this.enableClickOnce(); this.removeLocalStorageCurrentDraft(currentDraftId); + this.extensionDataUpdated = false; }); }, createNote(note) { @@ -589,14 +644,6 @@ export default { this.savingDraft = false; setTimeout(() => { this.draftSavingStatus = this.$t('notes.draft.savedDraftStatus'); - if (this.autosaveProcessedFromEditorExtension) { - document.dispatchEvent(new CustomEvent('note-draft-auto-save-done', { - detail: { - draftId: this.note.id - } - })); - } - this.autosaveProcessedFromEditorExtension = false; }, this.autoSaveDelay/2); }).catch(e => { console.error('Error when creating draft note: ', e); @@ -607,6 +654,7 @@ export default { }); } }, + displayDraftMessage() { if (!this.draftNote) { return; diff --git a/notes-webapp/src/main/webapp/vue-app/notes-rich-editor/components/NoteFullRichEditor.vue b/notes-webapp/src/main/webapp/vue-app/notes-rich-editor/components/NoteFullRichEditor.vue index 3762cb5c7..84bb03d0e 100644 --- a/notes-webapp/src/main/webapp/vue-app/notes-rich-editor/components/NoteFullRichEditor.vue +++ b/notes-webapp/src/main/webapp/vue-app/notes-rich-editor/components/NoteFullRichEditor.vue @@ -54,7 +54,8 @@ :placeholder="titlePlaceholder" type="text" :maxlength="noteTitleMaxLength + 1" - class="py-0 px-1 mt-5 mb-0"> + class="py-0 px-1 mt-5 mb-0" + @input="waitUserTyping()">