From b1639c2c3671acc96222e5f526a86c0b8a6dbf70 Mon Sep 17 00:00:00 2001 From: Theo Sanderson Date: Sun, 17 Mar 2024 23:42:36 +0000 Subject: [PATCH] Reviewpage redesign (#1373) --- .../controller/DatasetCitationsController.kt | 2 +- .../backend/controller/SubmissionController.kt | 3 +++ .../submission/SubmissionDatabaseService.kt | 5 ++++- .../datasetcitations/CitationEndpointsTest.kt | 4 ++-- .../submission/SubmissionControllerClient.kt | 2 ++ .../submission/SubmissionConvenienceClient.kt | 2 ++ website/src/components/ReviewPage/ReviewCard.tsx | 2 +- website/src/components/ReviewPage/ReviewPage.tsx | 16 ++++++++++++---- website/src/hooks/useSubmissionOperations.ts | 6 ++++-- 9 files changed, 31 insertions(+), 11 deletions(-) diff --git a/backend/src/main/kotlin/org/loculus/backend/controller/DatasetCitationsController.kt b/backend/src/main/kotlin/org/loculus/backend/controller/DatasetCitationsController.kt index 90700848ae..993168efd4 100644 --- a/backend/src/main/kotlin/org/loculus/backend/controller/DatasetCitationsController.kt +++ b/backend/src/main/kotlin/org/loculus/backend/controller/DatasetCitationsController.kt @@ -97,7 +97,7 @@ class DatasetCitationsController( @GetMapping("/get-user-cited-by-dataset") fun getUserCitedByDataset(@UsernameFromJwt username: String): CitedBy { val statusFilter = listOf(APPROVED_FOR_RELEASE) - val userSequences = submissionDatabaseService.getSequences(username, null, null, statusFilter) + val userSequences = submissionDatabaseService.getSequences(username, null, null, statusFilter, statusFilter) return datasetCitationsService.getUserCitedByDataset(userSequences.sequenceEntries) } diff --git a/backend/src/main/kotlin/org/loculus/backend/controller/SubmissionController.kt b/backend/src/main/kotlin/org/loculus/backend/controller/SubmissionController.kt index cb34e1c11e..370ff293a9 100644 --- a/backend/src/main/kotlin/org/loculus/backend/controller/SubmissionController.kt +++ b/backend/src/main/kotlin/org/loculus/backend/controller/SubmissionController.kt @@ -255,6 +255,8 @@ class SubmissionController( ) @RequestParam(required = false) statusesFilter: List?, + @RequestParam(required = false) + initialStatusesFilter: List?, @UsernameFromJwt username: String, @RequestParam(required = false, defaultValue = "INCLUDE_WARNINGS") warningsFilter: WarningsFilter, @@ -275,6 +277,7 @@ class SubmissionController( organism, groupsFilter, statusesFilter, + initialStatusesFilter, warningsFilter, page, size, diff --git a/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt b/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt index aef7f8cb5d..5740dd15ec 100644 --- a/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt +++ b/backend/src/main/kotlin/org/loculus/backend/service/submission/SubmissionDatabaseService.kt @@ -414,6 +414,7 @@ class SubmissionDatabaseService( organism: Organism?, groupsFilter: List?, statusesFilter: List?, + statusesInitialFilter: List?, warningsFilter: WarningsFilter? = null, page: Int? = null, size: Int? = null, @@ -431,6 +432,7 @@ class SubmissionDatabaseService( } val listOfStatuses = statusesFilter ?: Status.entries + val listOfInitialStatuses = statusesInitialFilter ?: Status.entries sequenceEntriesTableProvider.get(organism).let { table -> val baseQuery = table @@ -456,7 +458,8 @@ class SubmissionDatabaseService( ) .select( where = { - table.groupNameIsOneOf(validatedGroupNames) + table.statusIsOneOf(listOfInitialStatuses) and + table.groupNameIsOneOf(validatedGroupNames) }, ) .orderBy(table.accessionColumn) diff --git a/backend/src/test/kotlin/org/loculus/backend/controller/datasetcitations/CitationEndpointsTest.kt b/backend/src/test/kotlin/org/loculus/backend/controller/datasetcitations/CitationEndpointsTest.kt index c878301bce..05fef51474 100644 --- a/backend/src/test/kotlin/org/loculus/backend/controller/datasetcitations/CitationEndpointsTest.kt +++ b/backend/src/test/kotlin/org/loculus/backend/controller/datasetcitations/CitationEndpointsTest.kt @@ -62,7 +62,7 @@ class CitationEndpointsTest( @Test fun `WHEN calling get user cited by dataset of non-existing user THEN returns empty results`() { every { - submissionDatabaseService.getSequences(any(), any(), any(), any()) + submissionDatabaseService.getSequences(any(), any(), any(), any(), any()) } returns GetSequenceResponse(sequenceEntries = emptyList(), statusCounts = emptyMap()) client.getUserCitedByDataset() @@ -88,7 +88,7 @@ class CitationEndpointsTest( @Test fun `WHEN calling get dataset cited by publication of existing dataset THEN returns results`() { every { - submissionDatabaseService.getSequences(any(), any(), any(), any()) + submissionDatabaseService.getSequences(any(), any(), any(), any(), any()) } returns GetSequenceResponse( sequenceEntries = listOf( SequenceEntryStatus( diff --git a/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionControllerClient.kt b/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionControllerClient.kt index fafa456011..9e5cb2cd75 100644 --- a/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionControllerClient.kt +++ b/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionControllerClient.kt @@ -86,6 +86,7 @@ class SubmissionControllerClient(private val mockMvc: MockMvc, private val objec organism: String = DEFAULT_ORGANISM, groupsFilter: List? = null, statusesFilter: List? = null, + initialStatusesFilter: List? = null, warningsFilter: WarningsFilter? = null, jwt: String? = jwtForDefaultUser, page: Int? = null, @@ -96,6 +97,7 @@ class SubmissionControllerClient(private val mockMvc: MockMvc, private val objec .withAuth(jwt) .param("groupsFilter", groupsFilter?.joinToString { it }) .param("statusesFilter", statusesFilter?.joinToString { it.name }) + .param("initialStatusesFilter", initialStatusesFilter?.joinToString { it.name }) .param("warningsFilter", warningsFilter?.name) .param("page", page?.toString()) .param("size", size?.toString()), diff --git a/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionConvenienceClient.kt b/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionConvenienceClient.kt index 0a4ecb218d..237352a52f 100644 --- a/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionConvenienceClient.kt +++ b/backend/src/test/kotlin/org/loculus/backend/controller/submission/SubmissionConvenienceClient.kt @@ -161,6 +161,7 @@ class SubmissionConvenienceClient( username: String = DEFAULT_USER_NAME, groupsFilter: List? = null, statusesFilter: List? = null, + initialStatusesFilter: List? = null, organism: String = DEFAULT_ORGANISM, warningsFilter: WarningsFilter = WarningsFilter.INCLUDE_WARNINGS, page: Int? = null, @@ -170,6 +171,7 @@ class SubmissionConvenienceClient( organism = organism, groupsFilter = groupsFilter, statusesFilter = statusesFilter, + initialStatusesFilter = initialStatusesFilter, warningsFilter = warningsFilter, jwt = generateJwtFor(username), page = page, diff --git a/website/src/components/ReviewPage/ReviewCard.tsx b/website/src/components/ReviewPage/ReviewCard.tsx index ee0e1ceec4..f48ba64f9d 100644 --- a/website/src/components/ReviewPage/ReviewCard.tsx +++ b/website/src/components/ReviewPage/ReviewCard.tsx @@ -51,7 +51,7 @@ export const ReviewCard: FC = ({ const { isLoading, data } = useGetMetadataAndAnnotations(organism, clientConfig, accessToken, sequenceEntryStatus); return ( -
+
= ({ clientConfig, organism, accessTo ); const reviewCards = ( -
+
{sequences.map((sequence) => { return (
@@ -322,9 +322,17 @@ const InnerReviewPage: FC = ({ clientConfig, organism, accessTo <>
-
- {controlPanel} - {bulkActionButtons} +
+
+ {controlPanel} + {bulkActionButtons} +
+
{reviewCards} {pagination} diff --git a/website/src/hooks/useSubmissionOperations.ts b/website/src/hooks/useSubmissionOperations.ts index 095f94f3f4..2bed5c4240 100644 --- a/website/src/hooks/useSubmissionOperations.ts +++ b/website/src/hooks/useSubmissionOperations.ts @@ -24,13 +24,14 @@ export function useSubmissionOperations( pageQuery: PageQuery, ) { const hooks = useMemo(() => backendClientHooks(clientConfig), [clientConfig]); - const [includedStatuses, setIncludedStatuses] = useState([ + const allRelevantStatuses = [ receivedStatus, inProcessingStatus, hasErrorsStatus, awaitingApprovalStatus, awaitingApprovalForRevocationStatus, - ]); + ]; + const [includedStatuses, setIncludedStatuses] = useState(allRelevantStatuses); const useGetSequences = hooks.useGetSequences( { headers: createAuthorizationHeader(accessToken), @@ -38,6 +39,7 @@ export function useSubmissionOperations( organism, }, queries: { + initialStatusesFilter: allRelevantStatuses.join(','), statusesFilter: includedStatuses.join(','), page: pageQuery.page - 1, size: pageQuery.size,