From 5c61a04bc4805a311efecf8daa3467e132c61ab4 Mon Sep 17 00:00:00 2001 From: Frank <29271979+FrankyHollywood@users.noreply.github.com> Date: Wed, 13 Dec 2023 11:05:12 +0100 Subject: [PATCH] set column order in views.yaml --- .../src/metadata/views/MetadataViewAPI.js | 1 + .../src/metadata/views/MetadataViewTabs.js | 10 +++++++++- .../io/fairspace/saturn/config/ViewsConfig.java | 4 ++++ .../saturn/services/views/ColumnDTO.java | 1 + .../saturn/services/views/ViewService.java | 8 ++++---- .../saturn/services/views/ViewServiceTest.java | 17 ++++++++++++++++- .../saturn/src/test/resources/test-views.yaml | 2 ++ 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/projects/mercury/src/metadata/views/MetadataViewAPI.js b/projects/mercury/src/metadata/views/MetadataViewAPI.js index 25960ab5fa..2c87ab39af 100644 --- a/projects/mercury/src/metadata/views/MetadataViewAPI.js +++ b/projects/mercury/src/metadata/views/MetadataViewAPI.js @@ -32,6 +32,7 @@ export type MetadataViewFacet = { }; export type MetadataViewColumn = { + displayIndex: number; name: string; title: string; type: ValueType; diff --git a/projects/mercury/src/metadata/views/MetadataViewTabs.js b/projects/mercury/src/metadata/views/MetadataViewTabs.js index 08d6cec005..26d050f772 100644 --- a/projects/mercury/src/metadata/views/MetadataViewTabs.js +++ b/projects/mercury/src/metadata/views/MetadataViewTabs.js @@ -53,7 +53,15 @@ export const MetadataViewTabs = (props: MetadataViewTabsProperties) => { accessColumn ]; } - return view.columns; + return view.columns.sort((a, b) => { + if (a.displayIndex > b.displayIndex) { + return 1; + } + if (a.displayIndex < b.displayIndex) { + return -1; + } + return 0; + }); }; return ( diff --git a/projects/saturn/src/main/java/io/fairspace/saturn/config/ViewsConfig.java b/projects/saturn/src/main/java/io/fairspace/saturn/config/ViewsConfig.java index 14cbe59f66..32bda905dd 100644 --- a/projects/saturn/src/main/java/io/fairspace/saturn/config/ViewsConfig.java +++ b/projects/saturn/src/main/java/io/fairspace/saturn/config/ViewsConfig.java @@ -87,6 +87,8 @@ public static class Column { @NotBlank public String title; @NotNull public ColumnType type; @NotBlank public String source; + // displayIndex determines the order of columns on the view page. + @NotNull public Integer displayIndex = 999; public String rdfType; public int priority; } @@ -97,6 +99,8 @@ public static class JoinView { public boolean reverse = false; @JsonSetter(nulls = Nulls.AS_EMPTY) public List include; + // displayIndex determines the order of columns on the view page, for joinView it is the column displaying the related entity + public Integer displayIndex = 999; } } } diff --git a/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ColumnDTO.java b/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ColumnDTO.java index d42388fff3..11fd5decae 100644 --- a/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ColumnDTO.java +++ b/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ColumnDTO.java @@ -8,4 +8,5 @@ public class ColumnDTO { String name; String title; ViewsConfig.ColumnType type; + Integer displayIndex; } diff --git a/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ViewService.java b/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ViewService.java index a1a49c842f..a788f2cd68 100644 --- a/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ViewService.java +++ b/projects/saturn/src/main/java/io/fairspace/saturn/services/views/ViewService.java @@ -175,9 +175,9 @@ public List getViews() { return viewsConfig.views.stream() .map(v -> { var columns = new ArrayList(); - columns.add(new ColumnDTO(v.name, v.itemName == null ? v.name : v.itemName, ColumnType.Identifier)); + columns.add(new ColumnDTO(v.name, v.itemName == null ? v.name : v.itemName, ColumnType.Identifier, 0)); for (var c : v.columns) { - columns.add(new ColumnDTO(v.name + "_" + c.name, c.title, c.type)); + columns.add(new ColumnDTO(v.name + "_" + c.name, c.title, c.type, c.displayIndex)); } for (var j : v.join) { var joinView = viewsConfig.views.stream().filter(view -> view.name.equalsIgnoreCase(j.view)).findFirst().orElse(null); @@ -185,13 +185,13 @@ public List getViews() { continue; } if (j.include.contains("id")) { - columns.add(new ColumnDTO(joinView.name, joinView.title, ColumnType.Identifier)); + columns.add(new ColumnDTO(joinView.name, joinView.title, ColumnType.Identifier, j.displayIndex)); } for (var c : joinView.columns) { if (!j.include.contains(c.name)) { continue; } - columns.add(new ColumnDTO(joinView.name + "_" + c.name, c.title, c.type)); + columns.add(new ColumnDTO(joinView.name + "_" + c.name, c.title, c.type, c.displayIndex)); } } return new ViewDTO(v.name, v.title, columns); diff --git a/projects/saturn/src/test/java/io/fairspace/saturn/services/views/ViewServiceTest.java b/projects/saturn/src/test/java/io/fairspace/saturn/services/views/ViewServiceTest.java index 74a787cf6c..5c77c73bc5 100644 --- a/projects/saturn/src/test/java/io/fairspace/saturn/services/views/ViewServiceTest.java +++ b/projects/saturn/src/test/java/io/fairspace/saturn/services/views/ViewServiceTest.java @@ -27,7 +27,6 @@ import java.util.stream.*; import static io.fairspace.saturn.TestUtils.*; -import static io.fairspace.saturn.TestUtils.mockAuthentication; import static io.fairspace.saturn.auth.RequestContext.getCurrentRequest; import static org.apache.jena.query.DatasetFactory.*; import static org.mockito.ArgumentMatchers.any; @@ -117,4 +116,20 @@ public void testFetchViewConfig() { .toList(); Assert.assertEquals(1, boolFacets.size()); } + + @Test + public void testDisplayIndex_IsSet() { + var views = viewService.getViews(); + var columns = views.get(1).getColumns().stream().toList(); + var selectedColumn = columns.stream().filter(c -> c.getTitle().equals("Morphology")).collect(Collectors.toList()).get(0); + Assert.assertEquals(Integer.valueOf(1), selectedColumn.getDisplayIndex()); + } + + @Test + public void testDisplayIndex_IsNotSet() { + var views = viewService.getViews(); + var columns = views.get(1).getColumns().stream().toList(); + var selectedColumn = columns.stream().filter(c -> c.getTitle().equals("Laterality")).collect(Collectors.toList()).get(0); + Assert.assertEquals(Integer.valueOf(999), selectedColumn.getDisplayIndex()); + } } diff --git a/projects/saturn/src/test/resources/test-views.yaml b/projects/saturn/src/test/resources/test-views.yaml index e039c10f17..99d271eb44 100644 --- a/projects/saturn/src/test/resources/test-views.yaml +++ b/projects/saturn/src/test/resources/test-views.yaml @@ -99,6 +99,7 @@ views: source: https://institut-curie.org/ontology#tumorMorphology rdfType: https://institut-curie.org/ontology#Morphology type: termSet + displayIndex: 1 - name: laterality title: Laterality source: https://institut-curie.org/ontology#tumorLaterality @@ -177,6 +178,7 @@ views: - id - gender - ageAtDeath + displayIndex: 0 - view: Sample on: https://institut-curie.org/ontology#diagnosis reverse: true