From 07ecc9f037d5340b38b1ed6c926eae901995b27d Mon Sep 17 00:00:00 2001 From: Helmi Akermi <70575401+hakermi@users.noreply.github.com> Date: Thu, 12 Feb 2026 11:27:26 +0100 Subject: [PATCH 1/3] fix: Breadcrumb displayed title not updated when restore a version - MEED-10215 - Meeds-io/meeds#4029 (#1620) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prior to this change, when restoring a version, the breadcrumb displayed the original note title instead of the selected version’s title. This happened because the `getBreadcrumb` endpoint did not take the lang query parameter into account. Instead, it relied on the request’s locale language. As a result, when the requested locale did not match the targeted version language, the endpoint fell back to the original note title. This PR updates the title resolution logic to use the provided target language query parameter, ensuring that the correct version title is displayed in the breadcrumb. --- .../exoplatform/wiki/service/impl/NoteServiceImpl.java | 2 +- .../exoplatform/wiki/service/rest/NotesRestService.java | 2 +- .../org/exoplatform/wiki/storage/EntityConverter.java | 1 + .../webapp/vue-app/notes/components/NotesOverview.vue | 8 +++++++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java b/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java index 473892fc4..624621b53 100644 --- a/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java +++ b/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java @@ -2074,7 +2074,7 @@ private List getBreadCrumb(List list, private String getNoteTitleWithTraduction(Page note, Identity userIdentity, String source, String lang) throws WikiException, IllegalAccessException { - if (userIdentity == null || StringUtils.isEmpty(lang)) { + if (userIdentity == null) { return note.getTitle(); } Page page = getNoteByIdAndLang(Long.valueOf(note.getId()), userIdentity, source, lang); 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 a4908bad2..a5bfbb121 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 @@ -319,7 +319,7 @@ public Response getNoteById(@Parameter(description = "Note id", required = true) note.setBreadcrumb(noteService.getBreadCrumb(note.getWikiType(), note.getWikiOwner(), note.getName(), - request.getLocale().getLanguage(), + lang, identity, false)); return Response.ok(note).build(); diff --git a/notes-service/src/main/java/org/exoplatform/wiki/storage/EntityConverter.java b/notes-service/src/main/java/org/exoplatform/wiki/storage/EntityConverter.java index c5919c1d2..f302a77d1 100644 --- a/notes-service/src/main/java/org/exoplatform/wiki/storage/EntityConverter.java +++ b/notes-service/src/main/java/org/exoplatform/wiki/storage/EntityConverter.java @@ -325,6 +325,7 @@ public static PageHistory convertPageVersionEntityToPageHistory(PageVersionEntit pageHistory.setUpdatedDate(pageVersionEntity.getUpdatedDate()); pageHistory.setLang(pageVersionEntity.getLang()); pageHistory.setTitle(pageVersionEntity.getTitle()); + pageHistory.setName(pageVersionEntity.getName()); buildNotePageMetadata(pageHistory, false, String.valueOf(pageVersionEntity.getPage().getId())); if (StringUtils.isNotBlank(pageHistory.getAuthor())) { Identity identity = ExoContainerContext.getService(IdentityManager.class) diff --git a/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue b/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue index 8975c63e2..35bed22b1 100644 --- a/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue +++ b/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue @@ -579,8 +579,13 @@ export default { canScheduleNotePublication() { return this.note?.canManage || this.canSchedule; }, + hasTranslations() { + return !!this.translations?.length; + }, targetLang() { - return this.selectedTranslation?.value || this.lang; + return this.hasTranslations + ? (this.selectedTranslation?.value || this.lang) + : null; }, parentPageId() { return this.note?.parentPageId; @@ -1065,6 +1070,7 @@ export default { restoreVersion(version) { const note = { id: this.note.id, + name: version.name, title: version.title, content: version.content, updatedDate: version.updatedDate, From e9dc5cceda22bec1497852c18861505edef53f4a Mon Sep 17 00:00:00 2001 From: Helmi Akermi <70575401+hakermi@users.noreply.github.com> Date: Thu, 12 Feb 2026 17:57:10 +0100 Subject: [PATCH 2/3] fix: Toc displayed title not updated when restore a version - MEED-10246 - Meeds-io/meeds#4029 (#1622) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prior to this change, when restoring a version, the table of content displays the original note title instead of the selected version’s title. This happened because the Resolving titles of Toc json tree doesn't take into consideration the non exiting or target default request lang version This PR updates the title resolution to check the existence of the target version lang otherwise returns last published version title, ensuring that the correct version title is --- .../org/exoplatform/wiki/service/impl/NoteServiceImpl.java | 5 +++-- .../exoplatform/wiki/service/rest/NotesRestService.java | 2 +- .../java/org/exoplatform/wiki/tree/utils/TreeUtils.java | 7 ++++++- .../main/webapp/vue-app/notes/components/NotesOverview.vue | 7 +------ 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java b/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java index 624621b53..be1a7a8af 100644 --- a/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java +++ b/notes-service/src/main/java/org/exoplatform/wiki/service/impl/NoteServiceImpl.java @@ -2078,10 +2078,11 @@ private String getNoteTitleWithTraduction(Page note, Identity userIdentity, Stri return note.getTitle(); } Page page = getNoteByIdAndLang(Long.valueOf(note.getId()), userIdentity, source, lang); - if (page != null) { + if (page != null && page.getLang() != null) { return page.getTitle(); } - return note.getTitle(); + Page publishedVersion = getPublishedVersionByPageIdAndLang(Long.valueOf(note.getId()), null); + return Objects.requireNonNullElse(publishedVersion, note).getTitle(); } private String getDraftNameSuffix(long clientTime) { 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 a5bfbb121..a4908bad2 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 @@ -319,7 +319,7 @@ public Response getNoteById(@Parameter(description = "Note id", required = true) note.setBreadcrumb(noteService.getBreadCrumb(note.getWikiType(), note.getWikiOwner(), note.getName(), - lang, + request.getLocale().getLanguage(), identity, false)); return Response.ok(note).build(); diff --git a/notes-service/src/main/java/org/exoplatform/wiki/tree/utils/TreeUtils.java b/notes-service/src/main/java/org/exoplatform/wiki/tree/utils/TreeUtils.java index 2ef068ff1..839f44b0e 100644 --- a/notes-service/src/main/java/org/exoplatform/wiki/tree/utils/TreeUtils.java +++ b/notes-service/src/main/java/org/exoplatform/wiki/tree/utils/TreeUtils.java @@ -294,8 +294,13 @@ private static void encodeWikiTreeNode(JsonNodeData nodeData, Locale locale, Ide } else { if (!nodeData.isDraftPage()) { Page page = noteService.getNoteByIdAndLang(Long.valueOf(nodeData.getNoteId()), identity, "", locale.getLanguage()); - if (page != null) { + if (page != null && page.getLang() != null) { nodeData.setName(page.getTitle()); + return; + } + Page publishedVersion = noteService.getPublishedVersionByPageIdAndLang(Long.valueOf(nodeData.getNoteId()), null); + if (publishedVersion != null) { + nodeData.setName(publishedVersion.getTitle()); } } } diff --git a/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue b/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue index 35bed22b1..62b02adc3 100644 --- a/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue +++ b/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue @@ -579,13 +579,8 @@ export default { canScheduleNotePublication() { return this.note?.canManage || this.canSchedule; }, - hasTranslations() { - return !!this.translations?.length; - }, targetLang() { - return this.hasTranslations - ? (this.selectedTranslation?.value || this.lang) - : null; + return this.selectedTranslation?.value || this.lang; }, parentPageId() { return this.note?.parentPageId; From 539502783dbd099bd0658a58b8f8ec2a50e5b2f7 Mon Sep 17 00:00:00 2001 From: Helmi Akermi <70575401+hakermi@users.noreply.github.com> Date: Fri, 13 Feb 2026 10:07:07 +0100 Subject: [PATCH 3/3] fix: close publication drawer after note is published - MEED-10213 - Meeds-io/meeds#4020 (#1613) Prior to this change, the publication drawer remained open and showed a loading state even after a note was successfully published.The issue was caused by a missing event listener for the note-published event. This fix adds the listener to automatically close the drawer once the note is published, improving the user experience. --- .../main/webapp/vue-app/notes/components/NotesOverview.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue b/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue index 62b02adc3..8d451ef19 100644 --- a/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue +++ b/notes-webapp/src/main/webapp/vue-app/notes/components/NotesOverview.vue @@ -696,6 +696,8 @@ export default { this.$root.$on('open-note-import-drawer', this.openImportDrawer); this.$root.$on('open-publish-drawer', this.openPublishDrawer); this.$root.$on('duplicate-note', this.duplicateNote); + + document.addEventListener('note-published', this.handleNotePublished); }, mounted() { this.handleChangePages(); @@ -1058,7 +1060,7 @@ export default { this.actualVersion.current = true; this.note.content = version.content; this.note.title = version.title; - this.noteSummary = version.properties.summary; + this.noteSummary = version?.properties?.summary; this.note.properties = version.properties; this.noteTitle = version.title; },