From 75a8cbf288751f573e64d5e4ffc67834d7bdc729 Mon Sep 17 00:00:00 2001 From: Nilansh Bansal Date: Sat, 7 Jan 2023 00:29:57 +0530 Subject: [PATCH] Feat: App Positioning Feature Backend Implementation (#19514) ## Description Implements backend functionality for App Positioning (Auto Layout) Feature Fixes #19348 ## Type of change - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - JUnit - Manual ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [x] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --- .../appsmith/server/domains/Application.java | 39 +++++++++++++++++++ .../ce/ApplicationPageServiceCEImpl.java | 1 + .../services/ce/ApplicationServiceCETest.java | 5 +++ 3 files changed, 45 insertions(+) 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 b37eb57fa7..5537e7ea58 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 @@ -114,6 +114,11 @@ public class Application extends BaseDomain { NavigationSetting publishedNavigationSetting; + @JsonIgnore + AppPositioning publishedAppPositioning; + + @JsonIgnore + AppPositioning unpublishedAppPositioning; /** * Earlier this was returning value of the updatedAt property in the base domain. @@ -179,6 +184,8 @@ public class Application extends BaseDomain { this.icon = application.getIcon(); this.unpublishedAppLayout = application.getUnpublishedAppLayout() == null ? null : new AppLayout(application.getUnpublishedAppLayout().type); 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.unpublishedCustomJSLibs = application.getUnpublishedCustomJSLibs(); } @@ -281,4 +288,36 @@ public class Application extends BaseDomain { private Boolean showShareApp; } + public AppPositioning getAppPositioning() { + return Boolean.TRUE.equals(viewMode) ? publishedAppPositioning : unpublishedAppPositioning; + } + + public void setAppPositioning(AppPositioning appPositioning) { + if (Boolean.TRUE.equals(viewMode)) { + publishedAppPositioning = appPositioning; + } else { + unpublishedAppPositioning = appPositioning; + } + } + + /** + * AppPositioning captures widget positioning Mode of the application + */ + @Data + @NoArgsConstructor + public static class AppPositioning { + Type type; + + public AppPositioning(Type type) { + this.type = type; + } + + public enum Type { + FIXED, + AUTO + } + + } + + } 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 c80f8c4070..08c36484d3 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 @@ -1011,6 +1011,7 @@ public class ApplicationPageServiceCEImpl implements ApplicationPageServiceCE { application.setPublishedPages(pages); application.setPublishedAppLayout(application.getUnpublishedAppLayout()); + application.setPublishedAppPositioning(application.getUnpublishedAppPositioning()); if (isPublishedManually) { application.setLastDeployedAt(Instant.now()); } 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 10793194f7..d74b94ab84 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 @@ -2210,6 +2210,7 @@ public class ApplicationServiceCETest { String appName = "ApplicationServiceTest Publish Application"; testApplication.setName(appName); testApplication.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP)); + testApplication.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED)); Mono applicationMono = applicationPageService.createApplication(testApplication, workspaceId) .flatMap(application -> applicationPageService.publish(application.getId(), true)) .then(applicationService.findByName(appName, MANAGE_APPLICATIONS)) @@ -2241,6 +2242,7 @@ public class ApplicationServiceCETest { assertThat(newPage.getUnpublishedPage().getLayouts().get(0).getDsl()).isEqualTo(newPage.getPublishedPage().getLayouts().get(0).getDsl()); assertThat(application.getPublishedAppLayout()).isEqualTo(application.getUnpublishedAppLayout()); + assertThat(application.getPublishedAppPositioning()).isEqualTo(application.getUnpublishedAppPositioning()); }) .verifyComplete(); } @@ -2264,6 +2266,7 @@ public class ApplicationServiceCETest { String appName = "Publish Application With Archived Page"; testApplication.setName(appName); testApplication.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP)); + testApplication.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED)); Mono> resultMono = applicationPageService.createApplication(testApplication, workspaceId) .flatMap(application -> { PageDTO page = new PageDTO(); @@ -2364,6 +2367,7 @@ public class ApplicationServiceCETest { public void publishApplication_withGitConnectedApp_success() { GitApplicationMetadata gitData = gitConnectedApp.getGitApplicationMetadata(); gitConnectedApp.setAppLayout(new Application.AppLayout(Application.AppLayout.Type.DESKTOP)); + gitConnectedApp.setAppPositioning(new Application.AppPositioning(Application.AppPositioning.Type.FIXED)); Mono applicationMono = applicationService.update(gitConnectedApp.getId(), gitConnectedApp) .flatMap(updatedApp -> applicationPageService.publish(updatedApp.getId(), gitData.getBranchName(), true)) @@ -2394,6 +2398,7 @@ public class ApplicationServiceCETest { assertThat(newPage.getDefaultResources()).isNotNull(); assertThat(application.getPublishedAppLayout()).isEqualTo(application.getUnpublishedAppLayout()); + assertThat(application.getPublishedAppPositioning()).isEqualTo(application.getUnpublishedAppPositioning()); }) .verifyComplete(); }