diff --git a/znai-docs/znai/release-notes/1.83/fix-2025-11-08-add-new-file-toc.md b/znai-docs/znai/release-notes/1.83/fix-2025-11-08-add-new-file-toc.md new file mode 100644 index 000000000..0cdca3ba5 --- /dev/null +++ b/znai-docs/znai/release-notes/1.83/fix-2025-11-08-add-new-file-toc.md @@ -0,0 +1 @@ +* Fix: When new page is added to `toc`, deploy `all-pages.json` to have added pages loaded on page reload \ No newline at end of file diff --git a/znai-docs/znai/release-notes/2025.md b/znai-docs/znai/release-notes/2025.md index f8a16abb6..59a08f4e9 100644 --- a/znai-docs/znai/release-notes/2025.md +++ b/znai-docs/znai/release-notes/2025.md @@ -1,3 +1,7 @@ +# 1.83 + +:include-markdowns: 1.83 + # 1.82 :include-markdowns: 1.82 diff --git a/znai-server/src/main/java/org/testingisdocumenting/znai/server/preview/PreviewPushFileChangeHandler.java b/znai-server/src/main/java/org/testingisdocumenting/znai/server/preview/PreviewPushFileChangeHandler.java index b4c88ef67..704eda7ee 100644 --- a/znai-server/src/main/java/org/testingisdocumenting/znai/server/preview/PreviewPushFileChangeHandler.java +++ b/znai-server/src/main/java/org/testingisdocumenting/znai/server/preview/PreviewPushFileChangeHandler.java @@ -55,11 +55,14 @@ public void onTocChange(Path tocPath) { previewSocket.sendToc(tocAddedUpdatedAndRemovedPages.tableOfContents()); if (!tocAddedUpdatedAndRemovedPages.addedOrUpdatedPagesProps().isEmpty()) { + ConsoleOutputs.out("added/updated pages detected"); previewSocket.sendPages(tocAddedUpdatedAndRemovedPages.addedOrUpdatedPagesProps().stream() .map(HtmlPageAndPageProps::props)); + previewWebSite.buildJsonOfAllPages(); } if (!tocAddedUpdatedAndRemovedPages.removedTocItems().isEmpty()) { + ConsoleOutputs.out("removed pages detected"); previewSocket.sendPagesRemove(tocAddedUpdatedAndRemovedPages.removedTocItems().stream()); } }); diff --git a/znai-tests/src/test/groovy/scenarios/preview.groovy b/znai-tests/src/test/groovy/scenarios/preview.groovy index 4450fcf1a..3883cbd9f 100644 --- a/znai-tests/src/test/groovy/scenarios/preview.groovy +++ b/znai-tests/src/test/groovy/scenarios/preview.groovy @@ -26,10 +26,10 @@ import static pages.Pages.* def scaffoldedPathCache = cache.value('scaffolded-docs-for-preview') scenario('scaffold docs and run preview') { - def tempPath = fs.tempDir('znai-scaffold-for-preview') - CliCommands.znai.run('new', cli.workingDir(tempPath)) + def scaffoldPath = fs.tempDir('znai-scaffold-for-preview') + CliCommands.znai.run('new', cli.workingDir(scaffoldPath)) - def docsPath = tempPath.resolve("guide") + def docsPath = scaffoldPath.resolve("guide") scaffoldedPathCache.set(docsPath.toString()) def port = 3457 @@ -48,6 +48,26 @@ scenario('footer should be updated on footer file change') { standardView.footer.waitTo == "new footer" } +scenario('toc update should redeploy all pages json and new page link should be active on page reload') { + def docsPath = scaffoldedPathCache.getAsPath() + fs.createDir(docsPath.resolve("new-chapter")) + fs.writeText(docsPath.resolve("new-chapter/new-page.md"), "new page content") + + def tocPath = docsPath.resolve("toc") + def tocContent = fs.textContent(tocPath).data + fs.writeText(tocPath, tocContent + "\nnew-chapter\n new-page.md") + + def newPageTocItem = standardView.tocItems.get("New Page") + newPageTocItem.waitToBe visible + standardView.pageTitle.should == "New Page" + + standardView.pageTwoTocItem.click() + browser.refresh() + + newPageTocItem.click() + standardView.pageTitle.waitTo == "New Page" +} + scenario('preview jumps to a page associated with a change') { def docsPath = scaffoldedPathCache.getAsPath() diff --git a/znai-website-gen/src/main/java/org/testingisdocumenting/znai/website/WebSite.java b/znai-website-gen/src/main/java/org/testingisdocumenting/znai/website/WebSite.java index d8b9b394f..7f46ff5cd 100644 --- a/znai-website-gen/src/main/java/org/testingisdocumenting/znai/website/WebSite.java +++ b/znai-website-gen/src/main/java/org/testingisdocumenting/znai/website/WebSite.java @@ -699,7 +699,7 @@ private void generateLlmContent() { deployer.deploy("llm.txt", llmContent); } - private void buildJsonOfAllPages() { + public void buildJsonOfAllPages() { List> listOfMaps = this.pagePropsByTocItem .values().stream().map(DocPageReactProps::toMap).collect(toList()); String json = JsonUtils.serialize(listOfMaps);