From 74c2546d5bc6b6245acd256b1c3212dcbd145976 Mon Sep 17 00:00:00 2001
From: Andrew Telnov <andrew.telnov@gmail.com>
Date: Mon, 24 Feb 2025 14:05:45 +0200
Subject: [PATCH] When firstPageIsStartPage is enabled, the number of a ghost
 page on the design surface is incorrect fix #6623

---
 .../src/components/tabs/designer.ts                  | 12 ++++++++++--
 .../survey-creator-core/tests/tabs/designer.test.ts  |  6 ++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/packages/survey-creator-core/src/components/tabs/designer.ts b/packages/survey-creator-core/src/components/tabs/designer.ts
index de745a9ee4..c1e7311a63 100644
--- a/packages/survey-creator-core/src/components/tabs/designer.ts
+++ b/packages/survey-creator-core/src/components/tabs/designer.ts
@@ -72,12 +72,17 @@ export class TabDesignerViewModel extends Base {
         });
       }
     };
-    newPage.num = this.survey.pages.length + 1;
+    newPage.num = this.getNewPageNum();
     newPage.onPropertyChanged.add(checkNewElementHandler);
     DragDropSurveyElements.newGhostPage = newPage;
     delete newPage["ignoreUndoRedo"];
     return newPage;
   }
+  private getNewPageNum(): number {
+    const pages = this.survey.pages;
+    const num = pages.length + (this.survey.firstPageIsStarted ? 0 : 1);
+    return num > 0 ? num : 1;
+  }
   private get canShowNewPage(): boolean {
     if (!this.survey || this.creator.pageEditMode === "single" || !this.creator.allowModifyPages) return false;
     return true;
@@ -265,6 +270,9 @@ export class TabDesignerViewModel extends Base {
       }
       this.checkNewPage(updatePageController);
     }
+    if(propName === "firstPageIsStartPage") {
+      this.checkNewPage(true);
+    }
     this.isUpdatingNewPage = false;
   }
   private calculateDesignerCss() {
@@ -319,7 +327,7 @@ export class TabDesignerViewModel extends Base {
     }
     if (updatePageController) {
       if (this.newPage) {
-        this.newPage.num = this.survey.pages.length + 1;
+        this.newPage.num = this.getNewPageNum();
         this.newPage.startLoadingFromJson();
         this.newPage.name = SurveyHelper.getNewPageName(this.survey.pages);
         this.newPage.endLoadingFromJson();
diff --git a/packages/survey-creator-core/tests/tabs/designer.test.ts b/packages/survey-creator-core/tests/tabs/designer.test.ts
index 5eccb0bd42..0356b89184 100644
--- a/packages/survey-creator-core/tests/tabs/designer.test.ts
+++ b/packages/survey-creator-core/tests/tabs/designer.test.ts
@@ -133,8 +133,14 @@ test("StringEditorViewModelBase page title placeholder for started page", () =>
   expect(editor.placeholderValue).toBeUndefined();
   expect(editor.placeholder).toBe("Start Page");
   expect(editor.placeholderValue).toBe("Start Page");
+  const desigerTab = creator.getPlugin("designer").model as TabDesignerViewModel;
+  const adorderPageGhost = new PageAdorner(creator, desigerTab.newPage);
+  adorderPageGhost.isGhost = true;
+  const editorGhost: StringEditorViewModelBase = new StringEditorViewModelBase(desigerTab.newPage.locTitle, null);
+  expect(editorGhost.placeholder).toBe("Page 2");
   survey.firstPageIsStartPage = false;
   expect(editor.placeholder).toBe("Page 1");
+  expect(editorGhost.placeholder).toBe("Page 3");
 });
 
 test("Logo css", () => {