fix: Navigation Settings API (#19780)

## Description
This PR bug fixes the API for updating Navigation Settings (implemented
by #19272).

Fixes #19163 

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## How Has This Been Tested?

- 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
- [ ] 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
- [ ] 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
This commit is contained in:
Nilansh Bansal 2023-01-17 18:58:38 +05:30 committed by GitHub
parent 68d21fba7c
commit 3b1c663a54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 0 deletions

View File

@ -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

View File

@ -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());
}

View File

@ -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<ApplicationRepository,
.flatMap(branchedApplication -> {
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);
});
}

View File

@ -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<Application> 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<Tuple3<NewAction, ActionCollection, NewPage>> 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<Application> 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();
}