@abi-software/map-side-bar 1.3.4 → 1.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abi-software/map-side-bar",
3
- "version": "1.3.2",
3
+ "version": "1.3.6",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abi-software/map-side-bar",
3
- "version": "1.3.4",
3
+ "version": "1.3.7",
4
4
  "main": "./dist/map-side-bar.common.js",
5
5
  "files": [
6
6
  "dist/*",
@@ -1,9 +1,10 @@
1
1
  /* eslint-disable no-alert, no-console */
2
2
  import algoliasearch from 'algoliasearch'
3
+ import markerZoomLevels from './markerZoomLevels';
3
4
 
4
5
  // export `createAlgoliaClient` to use it in page components
5
6
  export class AlgoliaClient {
6
- constructor(algoliaId, algoliaKey, PENNSIEVE_API_LOCATION='https://api.pennsieve.io') {
7
+ constructor(algoliaId, algoliaKey, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
7
8
  this.client = algoliasearch(
8
9
  algoliaId,
9
10
  algoliaKey
@@ -14,9 +15,9 @@ export class AlgoliaClient {
14
15
  this.index = this.client.initIndex(ALGOLIA_INDEX);
15
16
  }
16
17
 
17
- getAlgoliaFacets (propPathMapping) {
18
+ getAlgoliaFacets(propPathMapping) {
18
19
  const map = new Map(Object.entries(propPathMapping));
19
- const facetPropPaths = Array.from(map.keys() );
20
+ const facetPropPaths = Array.from(map.keys());
20
21
  let facetData = []
21
22
  let facetId = 0
22
23
  return this.index
@@ -28,7 +29,7 @@ export class AlgoliaClient {
28
29
  facetPropPaths.map((facetPropPath) => {
29
30
  var children = []
30
31
  const responseFacets = response.facets
31
- if (responseFacets === undefined) {return}
32
+ if (responseFacets === undefined) { return }
32
33
  const responseFacetChildren =
33
34
  responseFacets[facetPropPath] == undefined
34
35
  ? {}
@@ -52,18 +53,18 @@ export class AlgoliaClient {
52
53
  return facetData
53
54
  })
54
55
  }
55
-
56
+
56
57
  // Returns all DOIs of all versions for a given discover dataset
57
- _discoverAllDois (discoverId, PENNSIEVE_API_LOCATION='https://api.pennsieve.io') {
58
+ _discoverAllDois(discoverId, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
58
59
  return new Promise(resolve => {
59
- fetch(`${PENNSIEVE_API_LOCATION}/discover/datasets/${discoverId}/versions`).then(r=>r.json()).then(dataset => {
60
+ fetch(`${PENNSIEVE_API_LOCATION}/discover/datasets/${discoverId}/versions`).then(r => r.json()).then(dataset => {
60
61
  resolve(dataset.map(version => version.doi))
61
62
  })
62
63
  })
63
64
  }
64
-
65
+
65
66
  // Get all dois given a list of discoverIds
66
- _expandDois (discoverIds, PENNSIEVE_API_LOCATION='https://api.pennsieve.io') {
67
+ _expandDois(discoverIds, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {
67
68
  return new Promise(resolve => {
68
69
  let promiseList = discoverIds.map(discoverId => this._discoverAllDois(discoverId, PENNSIEVE_API_LOCATION))
69
70
  Promise.all(promiseList).then((values) => {
@@ -76,7 +77,7 @@ export class AlgoliaClient {
76
77
  let newResults = []
77
78
  let newResult = {}
78
79
  for (let res of results) {
79
- newResult = {...res}
80
+ newResult = { ...res }
80
81
  newResult = {
81
82
  doi: res.item.curie.split(':')[1],
82
83
  name: res.item.name,
@@ -91,82 +92,93 @@ export class AlgoliaClient {
91
92
  return newResults
92
93
  }
93
94
 
94
- _processKeywords(hits){
95
+ _processKeywords(hits) {
95
96
  let foundKeyWords = []
96
97
  let uniqueKeywords = []
97
- hits.forEach(hit=>{
98
- if ( hit.item && hit.item.keywords) {
99
- hit.item.keywords.forEach(keywordObj=>{
98
+ hits.forEach(hit => {
99
+ if (hit.item && hit.item.keywords) {
100
+ hit.item.keywords.forEach(keywordObj => {
100
101
  let keyword = keywordObj.keyword
101
102
  if (keyword.includes('UBERON') || keyword.includes('ilxtr') || keyword.includes('ILX')) {
102
- foundKeyWords.push(this._splitUberonURL(keyword))
103
- uniqueKeywords = [...new Set(foundKeyWords)]
103
+ foundKeyWords.push(this._processUberonURL(keyword))
104
104
  }
105
105
  })
106
106
  }
107
+ if (hit.anatomy && hit.anatomy.organ) {
108
+ hit.anatomy.organ.forEach(anatomy => {
109
+ markerZoomLevels.forEach(marker => {
110
+ if (anatomy.name.toLowerCase() === marker.name.toLowerCase()) {
111
+ foundKeyWords.push(marker.id)
112
+ }
113
+ })
114
+ })
115
+ }
107
116
  })
117
+ uniqueKeywords = [...new Set(foundKeyWords)]
108
118
  return uniqueKeywords
109
119
  }
110
120
 
111
- _splitUberonURL(url){
112
- return url.split('/').pop()
121
+ _processUberonURL(url) {
122
+ let ub = url.split('/').pop()
123
+ return ub.replace('_', ':')
113
124
  }
114
-
125
+
115
126
  /**
116
127
  * Get Search results
117
128
  * This is using fetch from the Algolia API
118
129
  */
119
- search (filter, query='', hitsperPage=10, page=1) {
130
+ search(filter, query = '', hitsperPage = 10, page = 1) {
120
131
  return new Promise(resolve => {
121
132
  this.index
122
- .search(query, {
123
- facets:['*'],
124
- hitsPerPage: hitsperPage,
125
- page: page-1,
126
- filters: filter,
127
- attributesToHighlight: [],
128
- attributesToRetrieve: [
129
- 'pennsieve.publishDate',
130
- 'pennsieve.updatedAt',
131
- 'item.curie',
132
- 'item.name',
133
- 'item.description',
134
- 'objectID',
135
- ],
136
- })
137
- .then(response => {
138
- let searchData = {
139
- items: this._processResultsForCards(response.hits),
140
- total: response.nbHits,
141
- discoverIds: response.hits.map(r=>r.pennsieve.identifier),
142
- dois: response.hits.map(r=>r.item.curie.split(':')[1])
143
- }
144
- resolve(searchData)
145
- })
133
+ .search(query, {
134
+ facets: ['*'],
135
+ hitsPerPage: hitsperPage,
136
+ page: page - 1,
137
+ filters: filter,
138
+ attributesToHighlight: [],
139
+ attributesToRetrieve: [
140
+ 'pennsieve.publishDate',
141
+ 'pennsieve.updatedAt',
142
+ 'item.curie',
143
+ 'item.name',
144
+ 'item.description',
145
+ 'objectID',
146
+ ],
147
+ })
148
+ .then(response => {
149
+ let searchData = {
150
+ items: this._processResultsForCards(response.hits),
151
+ total: response.nbHits,
152
+ discoverIds: response.hits.map(r => r.pennsieve.identifier),
153
+ dois: response.hits.map(r => r.item.curie.split(':')[1])
154
+ }
155
+ resolve(searchData)
156
+ })
146
157
  })
147
158
  }
148
159
 
149
- /**
150
- * Get key words
151
- * This is used to return all keywords for a given search. Note that you often want the hits per page to be maxed out
152
- */
153
- keywordsInSearch (filter, query='', hitsperPage=999999, page=1) {
154
- return new Promise(resolve => {
155
- this.index
160
+ /**
161
+ * Get key words
162
+ * This is used to return all keywords for a given search. Note that you often want the hits per page to be maxed out
163
+ */
164
+ keywordsInSearch(filter, query = '', hitsperPage = 999999, page = 1) {
165
+ return new Promise(resolve => {
166
+ this.index
156
167
  .search(query, {
157
- facets:['*'],
168
+ facets: ['*'],
158
169
  hitsPerPage: hitsperPage,
159
- page: page-1,
170
+ page: page - 1,
160
171
  filters: filter,
161
172
  attributesToHighlight: [],
162
173
  attributesToRetrieve: [
163
174
  'item.keywords.keyword',
175
+ 'anatomy.organ.name',
164
176
  ],
165
177
  })
166
178
  .then(response => {
167
179
  let keywords = this._processKeywords(response.hits)
168
180
  resolve(keywords)
169
181
  })
170
- })
171
- }
182
+ })
183
+ }
172
184
  }
@@ -0,0 +1,213 @@
1
+ // Set zoom values for micro and mesoscopic
2
+ let microscopic = 7
3
+ let mesoscopic = 5
4
+
5
+ // Set what level each uberon shows at
6
+ export default [
7
+ {
8
+ "id": "UBERON:0000948",
9
+ "name": "heart",
10
+ "showAtZoom": 1,
11
+ },
12
+ {
13
+ "id": "UBERON:0001759",
14
+ "name": "vagus nerve",
15
+ "showAtZoom": 1
16
+ },
17
+ {
18
+ "id": "UBERON:0001155",
19
+ "name": "colon",
20
+ "showAtZoom": 1
21
+ },
22
+ {
23
+ "id": "UBERON:0000945",
24
+ "name": "stomach",
25
+ "showAtZoom": 1
26
+ },
27
+ {
28
+ "id": "UBERON:0001013",
29
+ "name": "adipose tissue",
30
+ "showAtZoom": 1
31
+ },
32
+ {
33
+ "id": "UBERON:0001255",
34
+ "name": "urinary bladder",
35
+ "showAtZoom": 1
36
+ },
37
+ {
38
+ "id": "UBERON:0001348",
39
+ "name": "brown adipose tissue",
40
+ "showAtZoom": 6
41
+ },
42
+ {
43
+ "id": "UBERON:0002008",
44
+ "name": "cardiac nerve plexus",
45
+ "showAtZoom": 1
46
+ },
47
+ {
48
+ "id": "UBERON:0002240",
49
+ "name": "spinal cord",
50
+ "showAtZoom": 1
51
+ },
52
+ {
53
+ "id": "UBERON:0002005",
54
+ "name": "Enteric Nervous System",
55
+ "showAtZoom": 4
56
+ },
57
+ {
58
+ "id": "UBERON:0013702",
59
+ "name": "body proper",
60
+ "showAtZoom": 1
61
+ },
62
+ {
63
+ "id": "UBERON:0002298",
64
+ "name": "brainstem",
65
+ "showAtZoom": 1
66
+ },
67
+ {
68
+ "id": "UBERON:0002439",
69
+ "name": "myenteric nerve plexus",
70
+ "showAtZoom": 6
71
+ },
72
+ {
73
+ "id": "UBERON:0000010",
74
+ "name": "peripheral nervous system",
75
+ "showAtZoom": 6
76
+ },
77
+ {
78
+ "id": "UBERON:0002048",
79
+ "name": "lung",
80
+ "showAtZoom": 1
81
+ },
82
+ {
83
+ "id": "UBERON:0002410",
84
+ "name": "autonomic nervous system",
85
+ "showAtZoom": 6
86
+ },
87
+ {
88
+ "id": "UBERON:0002441",
89
+ "name": "cervicothoracic ganglion",
90
+ "showAtZoom": 6
91
+ },
92
+ {
93
+ "id": "UBERON:0005363",
94
+ "name": "inferior vagus X ganglion",
95
+ "showAtZoom": 6
96
+ },
97
+ {
98
+ "id": "UBERON:0001264",
99
+ "name": "pancreas",
100
+ "showAtZoom": 1
101
+ },
102
+ {
103
+ "id": "UBERON:0001884",
104
+ "name": "phrenic nerve",
105
+ "showAtZoom": 6
106
+ },
107
+ {
108
+ "id": "UBERON:0002059",
109
+ "name": "submandibular ganglion",
110
+ "showAtZoom": 7
111
+ },
112
+ {
113
+ "id": "UBERON:0001347",
114
+ "name": "white adipose tissue",
115
+ "showAtZoom": 6
116
+ },
117
+ {
118
+ "id": "UBERON:0001556",
119
+ "name": "lower urinary tract",
120
+ "showAtZoom": 1
121
+ },
122
+ {
123
+ "id": "UBERON:0002262",
124
+ "name": "celiac ganglion",
125
+ "showAtZoom": 5
126
+ },
127
+ {
128
+ "id": "UBERON:0000955",
129
+ "name": "Brain",
130
+ "showAtZoom": 1
131
+ },
132
+ {
133
+ "id": "UBERON:0000160",
134
+ "name": "intestine",
135
+ "showAtZoom": 1
136
+ },
137
+ {
138
+ "id": "UBERON:0001322",
139
+ "name": "sciatic nerve",
140
+ "showAtZoom": 1
141
+ },
142
+ {
143
+ "id": "UBERON:0001649",
144
+ "name": "glossopharyngeal nerve",
145
+ "showAtZoom": 6
146
+ },
147
+ {
148
+ "id": "UBERON:0002063",
149
+ "name": "sinus venosus",
150
+ "showAtZoom": 6
151
+ },
152
+ {
153
+ "id": "UBERON:0002107",
154
+ "name": "liver",
155
+ "showAtZoom": 1
156
+ },
157
+ {
158
+ "id": "UBERON:0002113",
159
+ "name": "kidney",
160
+ "showAtZoom": 1
161
+ },
162
+ {
163
+ "id": "UBERON:0002481",
164
+ "name": "bone tissue",
165
+ "showAtZoom": 1
166
+ },
167
+ {
168
+ "id": "UBERON:0004907",
169
+ "name": "lower digestive tract",
170
+ "showAtZoom": 4
171
+ },
172
+ {
173
+ "id": "UBERON:0000044",
174
+ "name": "Dorsal root ganglion",
175
+ "showAtZoom": 5
176
+ },
177
+ // New levels from Keeran
178
+ {
179
+ "id": "UBERON:0001736",
180
+ "name": "Submandibular gland",
181
+ "showAtZoom": microscopic
182
+ },
183
+ {
184
+ "id": "UBERON:0001103",
185
+ "name": "Diaphragm",
186
+ "showAtZoom": mesoscopic
187
+ },
188
+ {
189
+ "id": "UBERON:0001160",
190
+ "name": "Fundus of stomach",
191
+ "showAtZoom": mesoscopic
192
+ },
193
+ {
194
+ "id": "UBERON:0000955",
195
+ "name": "Brain",
196
+ "showAtZoom": mesoscopic
197
+ },
198
+ {
199
+ "id": "UBERON:0003708",
200
+ "name": "Carotid sinus",
201
+ "showAtZoom": microscopic
202
+ },
203
+ {
204
+ "id": "UBERON:0002079",
205
+ "name": "Left cardiac atrium",
206
+ "showAtZoom": mesoscopic
207
+ },
208
+ {
209
+ "id": "ILX:0485722",
210
+ "name": "Nodose ganglion",
211
+ "showAtZoom": microscopic
212
+ },
213
+ ]