diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java index 5537e7ea58..19e0cf819d 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Application.java @@ -110,8 +110,10 @@ public class Application extends BaseDomain { EmbedSetting embedSetting; + @JsonIgnore NavigationSetting unpublishedNavigationSetting; + @JsonIgnore NavigationSetting publishedNavigationSetting; @JsonIgnore @@ -186,6 +188,8 @@ public class Application extends BaseDomain { this.publishedAppLayout = application.getPublishedAppLayout() == null ? null : new AppLayout(application.getPublishedAppLayout().type); this.unpublishedAppPositioning = application.getUnpublishedAppPositioning() == null ? null : new AppPositioning(application.getUnpublishedAppPositioning().type); this.publishedAppPositioning = application.getPublishedAppPositioning() == null ? null : new AppPositioning(application.getPublishedAppPositioning().type); + this.unpublishedNavigationSetting = application.getUnpublishedNavigationSetting() == null ? null : new NavigationSetting(); + this.publishedNavigationSetting = application.getPublishedNavigationSetting() == null ? null : new NavigationSetting(); this.unpublishedCustomJSLibs = application.getUnpublishedCustomJSLibs(); } @@ -270,6 +274,17 @@ public class Application extends BaseDomain { private Boolean showNavigationBar; } + public NavigationSetting getNavigationSetting() { + return Boolean.TRUE.equals(viewMode) ? publishedNavigationSetting : unpublishedNavigationSetting; + } + + public void setNavigationSetting(NavigationSetting navigationSetting) { + if (Boolean.TRUE.equals(viewMode)) { + publishedNavigationSetting = navigationSetting; + } else { + unpublishedNavigationSetting = navigationSetting; + } + } /** * NavigationSetting stores the navigation configuration for the app diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationPageServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationPageServiceCEImpl.java index 08c36484d3..2f4bbb6224 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationPageServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationPageServiceCEImpl.java @@ -1012,6 +1012,7 @@ public class ApplicationPageServiceCEImpl implements ApplicationPageServiceCE { application.setPublishedAppLayout(application.getUnpublishedAppLayout()); application.setPublishedAppPositioning(application.getUnpublishedAppPositioning()); + application.setPublishedNavigationSetting(application.getUnpublishedNavigationSetting()); if (isPublishedManually) { application.setLastDeployedAt(Instant.now()); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationServiceCEImpl.java index a4d53c4f15..14540870d2 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ApplicationServiceCEImpl.java @@ -43,6 +43,7 @@ import com.appsmith.server.solutions.ApplicationPermission; import com.appsmith.server.solutions.DatasourcePermission; import com.mongodb.client.result.UpdateResult; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; @@ -310,6 +311,15 @@ public class ApplicationServiceCEImpl extends BaseService { application.setPages(null); application.setGitApplicationMetadata(null); + /** + * Retaining the logoAssetId field value while updating NavigationSetting + */ + Application.NavigationSetting requestNavSetting = application.getUnpublishedNavigationSetting(); + if (requestNavSetting != null) { + Application.NavigationSetting presetNavSetting = ObjectUtils.defaultIfNull(branchedApplication.getUnpublishedNavigationSetting(), new Application.NavigationSetting()); + requestNavSetting.setLogoAssetId(ObjectUtils.defaultIfNull(presetNavSetting.getLogoAssetId(), "")); + application.setUnpublishedNavigationSetting(requestNavSetting); + } return this.update(branchedApplication.getId(), application); }); } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/ApplicationServiceCETest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/ApplicationServiceCETest.java index d74b94ab84..7d5741123f 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/ApplicationServiceCETest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/ApplicationServiceCETest.java @@ -2211,6 +2211,9 @@ public class ApplicationServiceCETest { testApplication.setName(appName); testApplication.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP)); testApplication.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED)); + Application.NavigationSetting appNavigationSetting = new Application.NavigationSetting(); + appNavigationSetting.setOrientation("top"); + testApplication.setNavigationSetting(appNavigationSetting); Mono applicationMono = applicationPageService.createApplication(testApplication, workspaceId) .flatMap(application -> applicationPageService.publish(application.getId(), true)) .then(applicationService.findByName(appName, MANAGE_APPLICATIONS)) @@ -2243,6 +2246,7 @@ public class ApplicationServiceCETest { assertThat(application.getPublishedAppLayout()).isEqualTo(application.getUnpublishedAppLayout()); assertThat(application.getPublishedAppPositioning()).isEqualTo(application.getUnpublishedAppPositioning()); + assertThat(application.getPublishedNavigationSetting()).isEqualTo(application.getUnpublishedNavigationSetting()); }) .verifyComplete(); } @@ -2267,6 +2271,9 @@ public class ApplicationServiceCETest { testApplication.setName(appName); testApplication.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP)); testApplication.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED)); + Application.NavigationSetting appNavigationSetting = new Application.NavigationSetting(); + appNavigationSetting.setOrientation("top"); + testApplication.setNavigationSetting(appNavigationSetting); Mono> resultMono = applicationPageService.createApplication(testApplication, workspaceId) .flatMap(application -> { PageDTO page = new PageDTO(); @@ -2369,6 +2376,10 @@ public class ApplicationServiceCETest { gitConnectedApp.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP)); gitConnectedApp.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED)); + Application.NavigationSetting appNavigationSetting = new Application.NavigationSetting(); + appNavigationSetting.setOrientation("top"); + gitConnectedApp.setNavigationSetting(appNavigationSetting); + Mono applicationMono = applicationService.update(gitConnectedApp.getId(), gitConnectedApp) .flatMap(updatedApp -> applicationPageService.publish(updatedApp.getId(), gitData.getBranchName(), true)) .flatMap(application -> applicationService.findByBranchNameAndDefaultApplicationId(gitData.getBranchName(), gitData.getDefaultApplicationId(), MANAGE_APPLICATIONS)) @@ -2399,6 +2410,7 @@ public class ApplicationServiceCETest { assertThat(application.getPublishedAppLayout()).isEqualTo(application.getUnpublishedAppLayout()); assertThat(application.getPublishedAppPositioning()).isEqualTo(application.getUnpublishedAppPositioning()); + assertThat(application.getPublishedNavigationSetting()).isEqualTo(application.getUnpublishedNavigationSetting()); }) .verifyComplete(); }