diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 73ca51da9e..86453e671e 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -187,6 +187,7 @@ The ids used to create a subscription is also changed, refer to [ADR-159] for mo - https://github.com/eclipse-sirius/sirius-web/issues/3920[#3920] [form] Fix DateTime widget default style not set - https://github.com/eclipse-sirius/sirius-web/issues/3934[#3934] [diagram] Remove helper lines when moving pinned elements - https://github.com/eclipse-sirius/sirius-web/issues/3907[#3907] [diagram] Fix bad state update in handleNodesChange +- https://github.com/eclipse-sirius/sirius-web/issues/4079[#4079] [sirius-web] Fix a warning in the console when closing the project's context menu === New Features diff --git a/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/repositories/IProjectRepository.java b/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/repositories/IProjectRepository.java index 566993fb6d..8fb88fad61 100644 --- a/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/repositories/IProjectRepository.java +++ b/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/repositories/IProjectRepository.java @@ -12,9 +12,11 @@ *******************************************************************************/ package org.eclipse.sirius.web.domain.boundedcontexts.project.repositories; +import java.util.List; import java.util.UUID; import org.eclipse.sirius.web.domain.boundedcontexts.project.Project; +import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.repository.ListCrudRepository; import org.springframework.data.repository.ListPagingAndSortingRepository; import org.springframework.stereotype.Repository; @@ -26,4 +28,19 @@ */ @Repository public interface IProjectRepository extends ListPagingAndSortingRepository, ListCrudRepository, ProjectSearchRepository { + + @Query(""" + SELECT * FROM project + WHERE project.id IN (:projectIds) + ORDER BY project.name ASC + OFFSET :offset + LIMIT :limit + """) + List findAllById(List projectIds, long offset, int limit); + + @Query(""" + SELECT count(*) FROM project + WHERE project.id IN (:projectIds) + """) + long countAllById(List projectIds); } diff --git a/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/ProjectSearchService.java b/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/ProjectSearchService.java index 930f17c7ae..c5d01f714d 100644 --- a/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/ProjectSearchService.java +++ b/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/ProjectSearchService.java @@ -21,6 +21,7 @@ import org.eclipse.sirius.web.domain.boundedcontexts.project.repositories.IProjectRepository; import org.eclipse.sirius.web.domain.boundedcontexts.project.services.api.IProjectSearchService; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -54,7 +55,9 @@ public Page findAll(Pageable pageable) { } @Override - public List findAllByIds(List projectIds) { - return this.projectRepository.findAllById(projectIds); + public Page findAllById(List projectIds, Pageable pageable) { + var projects = this.projectRepository.findAllById(projectIds, pageable.getPageNumber() * pageable.getPageSize(), pageable.getPageSize()); + var count = this.projectRepository.countAllById(projectIds); + return new PageImpl<>(projects, pageable, count); } } diff --git a/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/api/IProjectSearchService.java b/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/api/IProjectSearchService.java index 732155c9c3..472ade5595 100644 --- a/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/api/IProjectSearchService.java +++ b/packages/sirius-web/backend/sirius-web-domain/src/main/java/org/eclipse/sirius/web/domain/boundedcontexts/project/services/api/IProjectSearchService.java @@ -33,5 +33,5 @@ public interface IProjectSearchService { Page findAll(Pageable pageable); - List findAllByIds(List projectIds); + Page findAllById(List projectIds, Pageable pageable); } diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/services/ProjectNatureTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/services/ProjectNatureTests.java index 50cc9d1541..de6616785c 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/services/ProjectNatureTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/services/ProjectNatureTests.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.PageRequest; import org.springframework.test.context.jdbc.Sql; import org.springframework.test.context.jdbc.SqlConfig; import org.springframework.transaction.annotation.Transactional; @@ -63,8 +64,8 @@ public void givenProjectWhenNatureIsAddedThenTheNewNatureIsVisible() { var projectId = optionalProject.map(Project::getId).orElseThrow(IllegalStateException::new); this.projectUpdateService.addNature(null, projectId, "new nature"); - var projects = this.projectSearchService.findAllByIds(List.of(TestIdentifiers.SYSML_SAMPLE_PROJECT)); - assertThat(projects) + var projects = this.projectSearchService.findAllById(List.of(TestIdentifiers.SYSML_SAMPLE_PROJECT), PageRequest.of(0, 20)); + assertThat(projects.stream().toList()) .isNotEmpty() .anySatisfy(project -> assertThat(project.getNatures()).hasSize(2)); } diff --git a/packages/sirius-web/frontend/sirius-web-application/src/views/edit-project/EditProjectNavbar/EditProjectNavbarMachine.ts b/packages/sirius-web/frontend/sirius-web-application/src/views/edit-project/EditProjectNavbar/EditProjectNavbarMachine.ts index 1efac73920..d1b557cad5 100644 --- a/packages/sirius-web/frontend/sirius-web-application/src/views/edit-project/EditProjectNavbar/EditProjectNavbarMachine.ts +++ b/packages/sirius-web/frontend/sirius-web-application/src/views/edit-project/EditProjectNavbar/EditProjectNavbarMachine.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Obeo. + * Copyright (c) 2023, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -142,7 +142,7 @@ export const editProjectNavbarMachine = Machine< on: { HANDLE_CLOSE_CONTEXT_MENU_EVENT: { target: 'empty', - actions: 'closeContextMenu', + actions: 'hideContextMenu', }, HANDLE_SHOW_MODAL_EVENT: { target: 'modalDisplayedState',