@abi-software/map-side-bar 2.7.2-beta.2 → 2.7.2-beta.4
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/dist/map-side-bar.js +7019 -7394
- package/dist/map-side-bar.umd.cjs +62 -59
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/App.vue +30 -95
- package/src/components/ConnectivityInfo.vue +189 -384
- package/src/components/SearchFilters.vue +51 -66
- package/src/components/SearchHistory.vue +1 -0
- package/src/components/SideBar.vue +116 -79
- package/src/components/SidebarContent.vue +1 -2
- package/src/components/Tabs.vue +95 -56
- package/src/components/flatmapQueries.js +291 -0
- package/src/components.d.ts +23 -2
- package/src/exampleConnectivityInput.js +1 -1
- package/src/components/ConnectivityCard.vue +0 -78
- package/src/components/ConnectivityExplorer.vue +0 -518
|
@@ -5,9 +5,7 @@
|
|
|
5
5
|
<div class="title-content">
|
|
6
6
|
<div class="block" v-if="entry.title">
|
|
7
7
|
<div class="title">
|
|
8
|
-
|
|
9
|
-
{{ capitalise(entry.title) }}
|
|
10
|
-
</span>
|
|
8
|
+
{{ capitalise(entry.title) }}
|
|
11
9
|
<template v-if="entry.featuresAlert">
|
|
12
10
|
<el-popover
|
|
13
11
|
width="250"
|
|
@@ -24,7 +22,13 @@
|
|
|
24
22
|
</el-popover>
|
|
25
23
|
</template>
|
|
26
24
|
</div>
|
|
27
|
-
<div
|
|
25
|
+
<div
|
|
26
|
+
v-if="
|
|
27
|
+
entry.provenanceTaxonomyLabel &&
|
|
28
|
+
entry.provenanceTaxonomyLabel.length > 0
|
|
29
|
+
"
|
|
30
|
+
class="subtitle"
|
|
31
|
+
>
|
|
28
32
|
{{ provSpeciesDescription }}
|
|
29
33
|
</div>
|
|
30
34
|
</div>
|
|
@@ -54,152 +58,53 @@
|
|
|
54
58
|
</div>
|
|
55
59
|
</div>
|
|
56
60
|
|
|
57
|
-
<div
|
|
61
|
+
<div
|
|
62
|
+
class="content-container population-display"
|
|
63
|
+
:class="dualConnectionSource ? 'population-display-toolbar' : ''"
|
|
64
|
+
>
|
|
58
65
|
<div class="block attribute-title-container">
|
|
59
66
|
<span class="attribute-title">Population Display</span>
|
|
60
67
|
</div>
|
|
61
68
|
<div class="block buttons-row">
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
@
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
<el-button
|
|
69
|
-
:class="activeView === 'graphView' ? 'button' : 'el-button-secondary'"
|
|
70
|
-
@click="switchConnectivityView('graphView')"
|
|
71
|
-
>
|
|
72
|
-
Graph view
|
|
73
|
-
</el-button>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
76
|
-
|
|
77
|
-
<div class="content-container content-container-connectivity" v-show="activeView === 'listView'">
|
|
78
|
-
{{ entry.paths }}
|
|
79
|
-
<div v-if="hasOrigins" class="block">
|
|
80
|
-
<div class="attribute-title-container">
|
|
81
|
-
<span class="attribute-title">Origin</span>
|
|
82
|
-
<el-popover
|
|
83
|
-
width="250"
|
|
84
|
-
trigger="hover"
|
|
85
|
-
:teleported="false"
|
|
86
|
-
popper-class="popover-origin-help"
|
|
87
|
-
>
|
|
88
|
-
<template #reference>
|
|
89
|
-
<el-icon class="info"><el-icon-warning /></el-icon>
|
|
90
|
-
</template>
|
|
91
|
-
<span style="word-break: keep-all">
|
|
92
|
-
<i>Origin</i> {{ originDescription }}
|
|
93
|
-
</span>
|
|
94
|
-
</el-popover>
|
|
95
|
-
</div>
|
|
96
|
-
<div
|
|
97
|
-
v-for="(origin, i) in entry.origins"
|
|
98
|
-
class="attribute-content"
|
|
99
|
-
:origin-item-label="origin"
|
|
100
|
-
:key="origin"
|
|
101
|
-
>
|
|
102
|
-
<span
|
|
103
|
-
@mouseenter="connectivityHovered(origin)"
|
|
104
|
-
@mouseleave="connectivityHovered()"
|
|
105
|
-
>
|
|
106
|
-
{{ capitalise(origin) }}
|
|
107
|
-
</span>
|
|
108
|
-
<el-icon
|
|
109
|
-
class="connectivity-search-icon"
|
|
110
|
-
@click="connectivityClicked(entry.featureId[0], 'Origins', origin)"
|
|
111
|
-
>
|
|
112
|
-
<el-icon-search />
|
|
113
|
-
</el-icon>
|
|
114
|
-
</div>
|
|
115
|
-
<el-button
|
|
116
|
-
v-show="hasOriginsWithDatasets"
|
|
117
|
-
class="button"
|
|
118
|
-
id="open-dendrites-button"
|
|
119
|
-
@click="openDendrites"
|
|
120
|
-
>
|
|
121
|
-
Explore origin data
|
|
122
|
-
</el-button>
|
|
123
|
-
</div>
|
|
124
|
-
<div v-if="hasComponents" class="block">
|
|
125
|
-
<div class="attribute-title-container">
|
|
126
|
-
<div class="attribute-title">Components</div>
|
|
127
|
-
</div>
|
|
128
|
-
<div
|
|
129
|
-
v-for="(component, i) in entry.components"
|
|
130
|
-
class="attribute-content"
|
|
131
|
-
:component-item-label="component"
|
|
132
|
-
:key="component"
|
|
133
|
-
>
|
|
134
|
-
<span
|
|
135
|
-
@mouseenter="connectivityHovered(component)"
|
|
136
|
-
@mouseleave="connectivityHovered()"
|
|
137
|
-
>
|
|
138
|
-
{{ capitalise(component) }}
|
|
139
|
-
</span>
|
|
140
|
-
<el-icon
|
|
141
|
-
class="connectivity-search-icon"
|
|
142
|
-
@click="connectivityClicked(entry.featureId[0], 'Components', component)"
|
|
143
|
-
>
|
|
144
|
-
<el-icon-search />
|
|
145
|
-
</el-icon>
|
|
69
|
+
<div v-if="dualConnectionSource">
|
|
70
|
+
<span>Connectivity from:</span>
|
|
71
|
+
<el-radio-group v-model="connectivitySource" @change="onConnectivitySourceChange">
|
|
72
|
+
<el-radio value="map">Map</el-radio>
|
|
73
|
+
<el-radio value="sckan">SCKAN</el-radio>
|
|
74
|
+
</el-radio-group>
|
|
146
75
|
</div>
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
<el-popover
|
|
152
|
-
width="250"
|
|
153
|
-
trigger="hover"
|
|
154
|
-
:teleported="false"
|
|
155
|
-
popper-class="popover-origin-help"
|
|
156
|
-
>
|
|
157
|
-
<template #reference>
|
|
158
|
-
<el-icon class="info"><el-icon-warning /></el-icon>
|
|
159
|
-
</template>
|
|
160
|
-
<span style="word-break: keep-all">
|
|
161
|
-
<i>Destination</i> is where the axons terminate
|
|
162
|
-
</span>
|
|
163
|
-
</el-popover>
|
|
164
|
-
</div>
|
|
165
|
-
<div
|
|
166
|
-
v-for="(destination, i) in entry.destinations"
|
|
167
|
-
class="attribute-content"
|
|
168
|
-
:destination-item-label="destination"
|
|
169
|
-
:key="destination"
|
|
170
|
-
>
|
|
171
|
-
<span
|
|
172
|
-
@mouseenter="connectivityHovered(destination)"
|
|
173
|
-
@mouseleave="connectivityHovered()"
|
|
76
|
+
<div>
|
|
77
|
+
<el-button
|
|
78
|
+
:class="activeView === 'listView' ? 'button' : 'el-button-secondary'"
|
|
79
|
+
@click="switchConnectivityView('listView')"
|
|
174
80
|
>
|
|
175
|
-
|
|
176
|
-
</
|
|
177
|
-
<el-
|
|
178
|
-
class="
|
|
179
|
-
@click="
|
|
81
|
+
List view
|
|
82
|
+
</el-button>
|
|
83
|
+
<el-button
|
|
84
|
+
:class="activeView === 'graphView' ? 'button' : 'el-button-secondary'"
|
|
85
|
+
@click="switchConnectivityView('graphView')"
|
|
180
86
|
>
|
|
181
|
-
|
|
182
|
-
</el-
|
|
87
|
+
Graph view
|
|
88
|
+
</el-button>
|
|
183
89
|
</div>
|
|
184
|
-
<el-button v-show="hasDestinationsWithDatasets" class="button" @click="openAxons"
|
|
185
|
-
>
|
|
186
|
-
Explore destination data
|
|
187
|
-
</el-button>
|
|
188
|
-
</div>
|
|
189
|
-
<div v-show="hasComponentsWithDatasets" class="block">
|
|
190
|
-
<el-button class="button" @click="openAll">
|
|
191
|
-
Search for data on components
|
|
192
|
-
</el-button>
|
|
193
90
|
</div>
|
|
91
|
+
</div>
|
|
194
92
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
93
|
+
<div class="content-container content-container-connectivity" v-show="activeView === 'listView'">
|
|
94
|
+
<connectivity-list
|
|
95
|
+
:key="entry.featureId[0]"
|
|
96
|
+
:entry="entry"
|
|
97
|
+
:origins="origins"
|
|
98
|
+
:components="components"
|
|
99
|
+
:destinations="destinations"
|
|
100
|
+
:originsWithDatasets="originsWithDatasets"
|
|
101
|
+
:componentsWithDatasets="componentsWithDatasets"
|
|
102
|
+
:destinationsWithDatasets="destinationsWithDatasets"
|
|
103
|
+
:availableAnatomyFacets="availableAnatomyFacets"
|
|
104
|
+
:connectivityError="connectivityError"
|
|
105
|
+
@toggle-connectivity-tooltip="onToggleConnectivityTooltip"
|
|
106
|
+
@connectivity-action-click="onConnectivityActionClick"
|
|
107
|
+
></connectivity-list>
|
|
203
108
|
</div>
|
|
204
109
|
|
|
205
110
|
<div class="content-container" v-show="activeView === 'graphView'">
|
|
@@ -207,8 +112,9 @@
|
|
|
207
112
|
<connectivity-graph
|
|
208
113
|
:key="entry.featureId[0]"
|
|
209
114
|
:entry="entry.featureId[0]"
|
|
210
|
-
:mapServer="
|
|
115
|
+
:mapServer="flatmapApi"
|
|
211
116
|
:sckanVersion="sckanVersion"
|
|
117
|
+
:connectivityFromMap="connectivityFromMap"
|
|
212
118
|
@tap-node="onTapNode"
|
|
213
119
|
ref="connectivityGraphRef"
|
|
214
120
|
/>
|
|
@@ -216,22 +122,17 @@
|
|
|
216
122
|
</div>
|
|
217
123
|
|
|
218
124
|
<div class="content-container content-container-references" v-if="resources.length">
|
|
219
|
-
<
|
|
125
|
+
<external-resource-card
|
|
220
126
|
:resources="resources"
|
|
221
127
|
@references-loaded="onReferencesLoaded"
|
|
222
128
|
@show-reference-connectivities="onShowReferenceConnectivities"
|
|
223
|
-
|
|
129
|
+
></external-resource-card>
|
|
224
130
|
</div>
|
|
225
131
|
</div>
|
|
226
132
|
</template>
|
|
227
133
|
|
|
228
134
|
<script>
|
|
229
|
-
|
|
230
|
-
import {
|
|
231
|
-
Warning as ElIconWarning,
|
|
232
|
-
Location as ElIconLocation,
|
|
233
|
-
Search as ElIconSearch,
|
|
234
|
-
} from '@element-plus/icons-vue'
|
|
135
|
+
/* eslint-disable no-alert, no-console */
|
|
235
136
|
import {
|
|
236
137
|
ElButton as Button,
|
|
237
138
|
ElContainer as Container,
|
|
@@ -242,9 +143,11 @@ import EventBus from './EventBus.js'
|
|
|
242
143
|
import {
|
|
243
144
|
CopyToClipboard,
|
|
244
145
|
ConnectivityGraph,
|
|
245
|
-
|
|
146
|
+
ConnectivityList,
|
|
147
|
+
ExternalResourceCard,
|
|
246
148
|
} from '@abi-software/map-utilities';
|
|
247
149
|
import '@abi-software/map-utilities/dist/style.css';
|
|
150
|
+
import { processConnectivity } from './flatmapQueries.js';
|
|
248
151
|
|
|
249
152
|
const titleCase = (str) => {
|
|
250
153
|
return str.replace(/\w\S*/g, (t) => {
|
|
@@ -265,12 +168,10 @@ export default {
|
|
|
265
168
|
Button,
|
|
266
169
|
Container,
|
|
267
170
|
Icon,
|
|
268
|
-
|
|
269
|
-
ElIconLocation,
|
|
270
|
-
ElIconSearch,
|
|
171
|
+
ExternalResourceCard,
|
|
271
172
|
CopyToClipboard,
|
|
272
173
|
ConnectivityGraph,
|
|
273
|
-
|
|
174
|
+
ConnectivityList,
|
|
274
175
|
},
|
|
275
176
|
props: {
|
|
276
177
|
entry: {
|
|
@@ -294,75 +195,44 @@ export default {
|
|
|
294
195
|
type: Array,
|
|
295
196
|
default: () => [],
|
|
296
197
|
},
|
|
198
|
+
useDOIFormatter: {
|
|
199
|
+
type: Boolean,
|
|
200
|
+
default: true,
|
|
201
|
+
},
|
|
297
202
|
},
|
|
298
203
|
data: function () {
|
|
299
204
|
return {
|
|
300
205
|
controller: undefined,
|
|
301
206
|
activeSpecies: undefined,
|
|
302
|
-
pubmedSearchUrl: '',
|
|
303
207
|
loading: false,
|
|
304
208
|
activeView: 'listView',
|
|
305
|
-
facetList: [],
|
|
306
209
|
showToolip: false,
|
|
307
210
|
showDetails: false,
|
|
308
211
|
originDescriptions: {
|
|
309
212
|
motor: 'is the location of the initial cell body of the circuit',
|
|
310
213
|
sensory: 'is the location of the initial cell body in the PNS circuit',
|
|
311
214
|
},
|
|
215
|
+
origins: [],
|
|
216
|
+
originsWithDatasets: [],
|
|
217
|
+
components: [],
|
|
218
|
+
componentsWithDatasets: [],
|
|
219
|
+
destinations: [],
|
|
220
|
+
destinationsWithDatasets: [],
|
|
221
|
+
connectivityFromMap: null,
|
|
312
222
|
uberons: [{ id: undefined, name: undefined }],
|
|
313
223
|
connectivityError: null,
|
|
314
224
|
timeoutID: undefined,
|
|
315
225
|
graphViewLoaded: false,
|
|
316
226
|
updatedCopyContent: '',
|
|
317
227
|
sckanVersion: '',
|
|
228
|
+
connectivitySource: 'sckan',
|
|
229
|
+
mapuuid: '',
|
|
230
|
+
mapId: '',
|
|
231
|
+
dualConnectionSource: false,
|
|
232
|
+
flatmapApi: '',
|
|
318
233
|
}
|
|
319
234
|
},
|
|
320
|
-
watch: {
|
|
321
|
-
availableAnatomyFacets: {
|
|
322
|
-
handler: function (val) {
|
|
323
|
-
this.convertFacetsToList(val)
|
|
324
|
-
},
|
|
325
|
-
immediate: true,
|
|
326
|
-
deep: true,
|
|
327
|
-
},
|
|
328
|
-
},
|
|
329
235
|
computed: {
|
|
330
|
-
hasProvenanceTaxonomyLabel: function () {
|
|
331
|
-
return (
|
|
332
|
-
this.entry.provenanceTaxonomyLabel &&
|
|
333
|
-
this.entry.provenanceTaxonomyLabel.length > 0
|
|
334
|
-
);
|
|
335
|
-
},
|
|
336
|
-
hasOrigins: function () {
|
|
337
|
-
return this.entry.origins && this.entry.origins.length > 0;
|
|
338
|
-
},
|
|
339
|
-
hasOriginsWithDatasets: function () {
|
|
340
|
-
return (
|
|
341
|
-
this.entry.originsWithDatasets &&
|
|
342
|
-
this.entry.originsWithDatasets.length > 0 &&
|
|
343
|
-
this.shouldShowExploreButton(this.entry.originsWithDatasets)
|
|
344
|
-
);
|
|
345
|
-
},
|
|
346
|
-
hasComponents: function () {
|
|
347
|
-
return this.entry.components && this.entry.components.length > 0;
|
|
348
|
-
},
|
|
349
|
-
hasComponentsWithDatasets: function () {
|
|
350
|
-
return (
|
|
351
|
-
this.entry.componentsWithDatasets &&
|
|
352
|
-
this.entry.componentsWithDatasets.length > 0 &&
|
|
353
|
-
this.shouldShowExploreButton(this.entry.componentsWithDatasets)
|
|
354
|
-
);
|
|
355
|
-
},
|
|
356
|
-
hasDestinations: function () {
|
|
357
|
-
return this.entry.destinations && this.entry.destinations.length > 0;
|
|
358
|
-
},
|
|
359
|
-
hasDestinationsWithDatasets: function () {
|
|
360
|
-
return (
|
|
361
|
-
this.entry.destinationsWithDatasets &&
|
|
362
|
-
this.entry.destinationsWithDatasets.length > 0 &&
|
|
363
|
-
this.shouldShowExploreButton(this.entry.destinationsWithDatasets)
|
|
364
|
-
);
|
|
365
|
-
},
|
|
366
236
|
resources: function () {
|
|
367
237
|
let resources = [];
|
|
368
238
|
if (this.entry && this.entry.hyperlinks) {
|
|
@@ -398,49 +268,6 @@ export default {
|
|
|
398
268
|
capitalise: function (text) {
|
|
399
269
|
return capitalise(text)
|
|
400
270
|
},
|
|
401
|
-
openUrl: function (url) {
|
|
402
|
-
window.open(url, '_blank')
|
|
403
|
-
},
|
|
404
|
-
openAll: function () {
|
|
405
|
-
EventBus.emit('onConnectivityActionClick', {
|
|
406
|
-
type: 'Facets',
|
|
407
|
-
labels: this.entry.componentsWithDatasets.map((a) => a.name.toLowerCase()),
|
|
408
|
-
})
|
|
409
|
-
},
|
|
410
|
-
openAxons: function () {
|
|
411
|
-
EventBus.emit('onConnectivityActionClick', {
|
|
412
|
-
type: 'Facets',
|
|
413
|
-
labels: this.entry.destinationsWithDatasets.map((a) => a.name.toLowerCase()),
|
|
414
|
-
})
|
|
415
|
-
},
|
|
416
|
-
// shouldShowExploreButton: Checks if the feature is in the list of available anatomy facets
|
|
417
|
-
shouldShowExploreButton: function (features) {
|
|
418
|
-
for (let i = 0; i < features.length; i++) {
|
|
419
|
-
if (this.facetList.includes(features[i].name.toLowerCase())) {
|
|
420
|
-
return true
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
return false
|
|
424
|
-
},
|
|
425
|
-
// convertFacetsToList: Converts the available anatomy facets to a list for easy searching
|
|
426
|
-
convertFacetsToList: function (facets) {
|
|
427
|
-
facets.forEach((facet) => {
|
|
428
|
-
if(facet.children) {
|
|
429
|
-
this.convertFacetsToList(facet.children)
|
|
430
|
-
} else {
|
|
431
|
-
this.facetList.push(facet.label.toLowerCase())
|
|
432
|
-
}
|
|
433
|
-
})
|
|
434
|
-
},
|
|
435
|
-
openDendrites: function () {
|
|
436
|
-
EventBus.emit('onConnectivityActionClick', {
|
|
437
|
-
type: 'Facets',
|
|
438
|
-
labels: this.entry.originsWithDatasets.map((a) => a.name.toLowerCase()),
|
|
439
|
-
})
|
|
440
|
-
},
|
|
441
|
-
pubmedSearchUrlUpdate: function (val) {
|
|
442
|
-
this.pubmedSearchUrl = val
|
|
443
|
-
},
|
|
444
271
|
showConnectivity: function (entry) {
|
|
445
272
|
// move the map center to highlighted area
|
|
446
273
|
const featureIds = entry.featureId || [];
|
|
@@ -449,6 +276,7 @@ export default {
|
|
|
449
276
|
},
|
|
450
277
|
switchConnectivityView: function (val) {
|
|
451
278
|
this.activeView = val;
|
|
279
|
+
|
|
452
280
|
if (val === 'graphView' && !this.graphViewLoaded) {
|
|
453
281
|
// to load the connectivity graph only after the container is in view
|
|
454
282
|
this.$nextTick(() => {
|
|
@@ -459,7 +287,7 @@ export default {
|
|
|
459
287
|
onTapNode: function (data) {
|
|
460
288
|
// save selected state for list view
|
|
461
289
|
const name = data.map(t => t.label).join(', ');
|
|
462
|
-
this.
|
|
290
|
+
this.toggleConnectivityTooltip(name, {show: true});
|
|
463
291
|
},
|
|
464
292
|
onShowReferenceConnectivities: function (refSource) {
|
|
465
293
|
this.$emit('show-reference-connectivities', refSource);
|
|
@@ -530,28 +358,28 @@ export default {
|
|
|
530
358
|
}
|
|
531
359
|
|
|
532
360
|
// Origins
|
|
533
|
-
if (this.
|
|
361
|
+
if (this.origins?.length) {
|
|
534
362
|
const title = 'Origin';
|
|
535
|
-
const origins = this.
|
|
536
|
-
const originsWithDatasets = this.
|
|
363
|
+
const origins = this.origins;
|
|
364
|
+
const originsWithDatasets = this.originsWithDatasets;
|
|
537
365
|
const transformedOrigins = transformData(title, origins, originsWithDatasets);
|
|
538
366
|
contentArray.push(transformedOrigins);
|
|
539
367
|
}
|
|
540
368
|
|
|
541
369
|
// Components
|
|
542
|
-
if (this.
|
|
370
|
+
if (this.components?.length) {
|
|
543
371
|
const title = 'Components';
|
|
544
|
-
const components = this.
|
|
545
|
-
const componentsWithDatasets = this.
|
|
372
|
+
const components = this.components;
|
|
373
|
+
const componentsWithDatasets = this.componentsWithDatasets;
|
|
546
374
|
const transformedComponents = transformData(title, components, componentsWithDatasets);
|
|
547
375
|
contentArray.push(transformedComponents);
|
|
548
376
|
}
|
|
549
377
|
|
|
550
378
|
// Destination
|
|
551
|
-
if (this.
|
|
379
|
+
if (this.destinations?.length) {
|
|
552
380
|
const title = 'Destination';
|
|
553
|
-
const destinations = this.
|
|
554
|
-
const destinationsWithDatasets = this.
|
|
381
|
+
const destinations = this.destinations;
|
|
382
|
+
const destinationsWithDatasets = this.destinationsWithDatasets;
|
|
555
383
|
const transformedDestinations = transformData(title, destinations, destinationsWithDatasets);
|
|
556
384
|
contentArray.push(transformedDestinations);
|
|
557
385
|
}
|
|
@@ -569,48 +397,31 @@ export default {
|
|
|
569
397
|
|
|
570
398
|
return contentArray.join('\n\n<br>');
|
|
571
399
|
},
|
|
572
|
-
|
|
400
|
+
toggleConnectivityTooltip: function (name, option) {
|
|
573
401
|
const allWithDatasets = [
|
|
574
|
-
...this.
|
|
575
|
-
...this.
|
|
576
|
-
...this.
|
|
402
|
+
...this.componentsWithDatasets,
|
|
403
|
+
...this.destinationsWithDatasets,
|
|
404
|
+
...this.originsWithDatasets,
|
|
577
405
|
];
|
|
578
|
-
const names =
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
},
|
|
593
|
-
connectivityHovered: function (label) {
|
|
594
|
-
const data = label ? this.getConnectivityDatasets(label) : [];
|
|
595
|
-
// type: to show error only for click event
|
|
596
|
-
this.$emit('connectivity-hovered', data);
|
|
597
|
-
},
|
|
598
|
-
connectivityClicked: function (id, type, label) {
|
|
599
|
-
let payload = {
|
|
600
|
-
query: id,
|
|
601
|
-
filter: [],
|
|
602
|
-
data: label ? this.getConnectivityDatasets(label) : [],
|
|
603
|
-
};
|
|
604
|
-
if (type && label) {
|
|
605
|
-
payload.filter.push({
|
|
606
|
-
AND: undefined,
|
|
607
|
-
facet: type,
|
|
608
|
-
facetPropPath: 'flatmap.connectivity.source',
|
|
609
|
-
facetSubPropPath: undefined,
|
|
610
|
-
term: 'Connectivity',
|
|
406
|
+
const names = name.split(','); // some features have more than one value
|
|
407
|
+
const data = [];
|
|
408
|
+
if (option.show) {
|
|
409
|
+
names.forEach((n) => {
|
|
410
|
+
const foundData = allWithDatasets.find((a) =>
|
|
411
|
+
a.name.toLowerCase().trim() === n.toLowerCase().trim()
|
|
412
|
+
);
|
|
413
|
+
|
|
414
|
+
if (foundData) {
|
|
415
|
+
data.push({
|
|
416
|
+
id: foundData.id,
|
|
417
|
+
label: foundData.name
|
|
418
|
+
});
|
|
419
|
+
}
|
|
611
420
|
});
|
|
612
|
-
}
|
|
613
|
-
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// type: to show error only for click event
|
|
424
|
+
this.$emit('connectivity-component-click', data);
|
|
614
425
|
},
|
|
615
426
|
getErrorConnectivities: function (errorData) {
|
|
616
427
|
const errorDataToEmit = [...new Set(errorData)];
|
|
@@ -666,10 +477,73 @@ export default {
|
|
|
666
477
|
this.connectivityError = null;
|
|
667
478
|
}, ERROR_TIMEOUT);
|
|
668
479
|
},
|
|
480
|
+
updateConnectionsData: function (source) {
|
|
481
|
+
this.origins = source.origins;
|
|
482
|
+
this.components = source.components;
|
|
483
|
+
this.destinations = source.destinations;
|
|
484
|
+
this.originsWithDatasets = source.originsWithDatasets;
|
|
485
|
+
this.componentsWithDatasets = source.componentsWithDatasets;
|
|
486
|
+
this.destinationsWithDatasets = source.destinationsWithDatasets;
|
|
487
|
+
|
|
488
|
+
this.updatedCopyContent = this.getUpdateCopyContent();
|
|
489
|
+
},
|
|
490
|
+
onConnectivitySourceChange: function (val) {
|
|
491
|
+
if (this.connectivitySource === 'map') {
|
|
492
|
+
this.getConnectionsFromMap(this.mapuuid, this.entry.featureId[0])
|
|
493
|
+
.then((response) => {
|
|
494
|
+
this.connectivityFromMap = response;
|
|
495
|
+
processConnectivity(this.flatmapApi, this.sckanVersion, response)
|
|
496
|
+
.then((result) => {
|
|
497
|
+
const mapSource = {
|
|
498
|
+
origins: result.labels.origins,
|
|
499
|
+
components: result.labels.components,
|
|
500
|
+
destinations: result.labels.destinations,
|
|
501
|
+
originsWithDatasets: result.withDatasets.originsWithDatasets,
|
|
502
|
+
componentsWithDatasets: result.withDatasets.componentsWithDatasets,
|
|
503
|
+
destinationsWithDatasets: result.withDatasets.destinationsWithDatasets,
|
|
504
|
+
}
|
|
505
|
+
this.updateConnectionsData(mapSource);
|
|
506
|
+
})
|
|
507
|
+
});
|
|
508
|
+
} else {
|
|
509
|
+
this.connectivityFromMap = null;
|
|
510
|
+
this.updateConnectionsData(this.entry);
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
getConnectionsFromMap: async function (mapuuid, pathId) {
|
|
514
|
+
const url = this.flatmapApi + `flatmap/${mapuuid}/connectivity/${pathId}`;
|
|
515
|
+
|
|
516
|
+
try {
|
|
517
|
+
const response = await fetch(url);
|
|
518
|
+
if (!response.ok) {
|
|
519
|
+
throw new Error(`Response status: ${response.status}`);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
return await response.json();
|
|
523
|
+
} catch (error) {
|
|
524
|
+
throw new Error(error);
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
onToggleConnectivityTooltip: function (data) {
|
|
528
|
+
const {name, option} = data;
|
|
529
|
+
this.toggleConnectivityTooltip(name, option);
|
|
530
|
+
},
|
|
531
|
+
onConnectivityActionClick: function (data) {
|
|
532
|
+
EventBus.emit('onConnectivityActionClick', data);
|
|
533
|
+
},
|
|
669
534
|
},
|
|
670
535
|
mounted: function () {
|
|
671
536
|
this.sckanVersion = this.entry['knowledge-source'];
|
|
672
|
-
this.
|
|
537
|
+
this.mapuuid = this.entry['mapuuid'];
|
|
538
|
+
this.mapId = this.entry['mapId'];
|
|
539
|
+
this.flatmapApi = this.envVars.FLATMAPAPI_LOCATION;
|
|
540
|
+
this.updateConnectionsData(this.entry);
|
|
541
|
+
|
|
542
|
+
// TODO: only rat flatmap has dual connections now
|
|
543
|
+
if (this.mapId === 'rat-flatmap') {
|
|
544
|
+
this.dualConnectionSource = true;
|
|
545
|
+
}
|
|
546
|
+
|
|
673
547
|
EventBus.on('connectivity-graph-error', (errorInfo) => {
|
|
674
548
|
this.pushConnectivityError(errorInfo);
|
|
675
549
|
});
|
|
@@ -706,10 +580,6 @@ export default {
|
|
|
706
580
|
font-weight: bold;
|
|
707
581
|
padding-bottom: 8px;
|
|
708
582
|
color: $app-primary-color;
|
|
709
|
-
|
|
710
|
-
span:hover {
|
|
711
|
-
cursor: pointer;
|
|
712
|
-
}
|
|
713
583
|
}
|
|
714
584
|
|
|
715
585
|
.block + .block {
|
|
@@ -754,17 +624,8 @@ export default {
|
|
|
754
624
|
}
|
|
755
625
|
}
|
|
756
626
|
|
|
757
|
-
.info,
|
|
758
627
|
.alert {
|
|
759
628
|
color: #8300bf;
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
.info {
|
|
763
|
-
transform: rotate(180deg);
|
|
764
|
-
margin-left: 8px;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
.alert {
|
|
768
629
|
margin-left: 5px;
|
|
769
630
|
vertical-align: text-bottom;
|
|
770
631
|
|
|
@@ -824,51 +685,6 @@ export default {
|
|
|
824
685
|
text-transform: uppercase;
|
|
825
686
|
}
|
|
826
687
|
|
|
827
|
-
.attribute-content {
|
|
828
|
-
display: flex;
|
|
829
|
-
justify-content: space-between;
|
|
830
|
-
font-size: 14px;
|
|
831
|
-
font-weight: 500;
|
|
832
|
-
transition: color 0.25s ease;
|
|
833
|
-
position: relative;
|
|
834
|
-
cursor: default;
|
|
835
|
-
|
|
836
|
-
.connectivity-search-icon {
|
|
837
|
-
display: none;
|
|
838
|
-
}
|
|
839
|
-
|
|
840
|
-
&:hover {
|
|
841
|
-
color: $app-primary-color;
|
|
842
|
-
|
|
843
|
-
.connectivity-search-icon {
|
|
844
|
-
padding-top: 4px;
|
|
845
|
-
cursor: pointer;
|
|
846
|
-
display: block;
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
+.attribute-content {
|
|
851
|
-
&::before {
|
|
852
|
-
content: "";
|
|
853
|
-
width: 90%;
|
|
854
|
-
height: 1px;
|
|
855
|
-
background-color: var(--el-border-color);
|
|
856
|
-
position: absolute;
|
|
857
|
-
top: 0;
|
|
858
|
-
left: 0;
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
|
|
862
|
-
&:last-of-type {
|
|
863
|
-
margin-bottom: 0.5em;
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
|
|
867
|
-
.popover-container {
|
|
868
|
-
height: 100%;
|
|
869
|
-
width: 100%;
|
|
870
|
-
}
|
|
871
|
-
|
|
872
688
|
.main {
|
|
873
689
|
.el-button.is-round {
|
|
874
690
|
border-radius: 4px;
|
|
@@ -925,18 +741,11 @@ export default {
|
|
|
925
741
|
margin-top: 0 !important;
|
|
926
742
|
margin-left: 10px !important;
|
|
927
743
|
}
|
|
928
|
-
}
|
|
929
744
|
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
align-items: center;
|
|
935
|
-
justify-content: space-between;
|
|
936
|
-
|
|
937
|
-
.el-button + .el-button {
|
|
938
|
-
margin-top: 0 !important;
|
|
939
|
-
margin-left: 10px !important;
|
|
745
|
+
> div:first-child {
|
|
746
|
+
display: flex;
|
|
747
|
+
align-items: center;
|
|
748
|
+
gap: 0.5rem;
|
|
940
749
|
}
|
|
941
750
|
}
|
|
942
751
|
|
|
@@ -948,6 +757,23 @@ export default {
|
|
|
948
757
|
justify-content: space-between;
|
|
949
758
|
border-bottom: 1px solid $app-primary-color;
|
|
950
759
|
padding-bottom: 0.5rem !important;
|
|
760
|
+
|
|
761
|
+
&.population-display-toolbar {
|
|
762
|
+
flex-direction: column !important;
|
|
763
|
+
align-items: start;
|
|
764
|
+
|
|
765
|
+
.buttons-row {
|
|
766
|
+
display: flex;
|
|
767
|
+
flex-direction: row;
|
|
768
|
+
align-items: center;
|
|
769
|
+
justify-content: space-between;
|
|
770
|
+
width: 100%;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.el-radio {
|
|
775
|
+
margin-right: 1rem;
|
|
776
|
+
}
|
|
951
777
|
}
|
|
952
778
|
|
|
953
779
|
.tooltip-container {
|
|
@@ -1069,25 +895,4 @@ export default {
|
|
|
1069
895
|
margin-top: -1.25rem;
|
|
1070
896
|
}
|
|
1071
897
|
}
|
|
1072
|
-
|
|
1073
|
-
.connectivity-error-container {
|
|
1074
|
-
position: sticky;
|
|
1075
|
-
bottom: 0.5rem;
|
|
1076
|
-
width: 100%;
|
|
1077
|
-
min-height: 31px; // placeholder
|
|
1078
|
-
margin-top: -10px !important;
|
|
1079
|
-
display: flex;
|
|
1080
|
-
flex-direction: row;
|
|
1081
|
-
align-items: center;
|
|
1082
|
-
justify-content: center;
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
.connectivity-error {
|
|
1086
|
-
width: fit-content;
|
|
1087
|
-
font-size: 12px;
|
|
1088
|
-
padding: 0.25rem 0.5rem;
|
|
1089
|
-
background-color: var(--el-color-error-light-9);
|
|
1090
|
-
border-radius: var(--el-border-radius-small);
|
|
1091
|
-
border: 1px solid var(--el-color-error);
|
|
1092
|
-
}
|
|
1093
898
|
</style>
|