-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathgetDatasetsV2.server.ts
105 lines (100 loc) · 2.58 KB
/
getDatasetsV2.server.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import type {
ApolloClient,
ApolloQueryResult,
NormalizedCacheObject,
} from '@apollo/client'
import { gql } from 'app/__generated_v2__'
import { GetDatasetsV2Query, OrderBy } from 'app/__generated_v2__/graphql'
import { MAX_PER_PAGE } from 'app/constants/pagination'
import { getFilterState } from 'app/hooks/useFilter'
import { getDatasetsFilter } from './common'
const GET_DATASETS_QUERY = gql(`
query GetDatasetsV2(
$limit: Int,
$offset: Int,
$orderBy: [DatasetOrderByClause!]!,
$datasetsFilter: DatasetWhereClause!,
# Unused, but must be defined because DatasetsAggregates references them:
$datasetsByDepositionFilter: DatasetWhereClause,
$tiltseriesByDepositionFilter: TiltseriesWhereClause,
$tomogramsByDepositionFilter: TomogramWhereClause,
$annotationsByDepositionFilter: AnnotationWhereClause,
$annotationShapesByDepositionFilter: AnnotationShapeWhereClause
) {
datasets(
where: $datasetsFilter
orderBy: $orderBy,
limitOffset: {
limit: $limit,
offset: $offset
}
) {
id
title
organismName
datasetPublications
keyPhotoThumbnailUrl
relatedDatabaseEntries
authors(orderBy: { authorListOrder: asc }) {
edges {
node {
name
primaryAuthorStatus
correspondingAuthorStatus
}
}
}
runsCount: runsAggregate {
aggregate {
count
}
}
distinctObjectNames: runsAggregate {
aggregate {
count
groupBy {
annotations {
objectName
groundTruthStatus
}
}
}
}
}
...DatasetsAggregates
}
`)
export async function getDatasetsV2({
page = 1,
titleOrderDirection,
searchText,
params = new URLSearchParams(),
client,
}: {
page?: number
titleOrderDirection?: OrderBy
searchText?: string
params?: URLSearchParams
client: ApolloClient<NormalizedCacheObject>
}): Promise<ApolloQueryResult<GetDatasetsV2Query>> {
return client.query({
query: GET_DATASETS_QUERY,
variables: {
datasetsFilter: getDatasetsFilter({
filterState: getFilterState(params),
searchText,
}),
limit: MAX_PER_PAGE,
offset: (page - 1) * MAX_PER_PAGE,
// Default order primarily by release date.
orderBy: titleOrderDirection
? [
{ title: titleOrderDirection },
{
releaseDate: OrderBy.Desc,
},
]
: [{ releaseDate: OrderBy.Desc }, { title: OrderBy.Asc }],
},
})
}