@abi-software/map-side-bar 2.5.3-beta.1 → 2.5.3-beta.10
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 +8256 -8209
- package/dist/map-side-bar.umd.cjs +111 -111
- package/dist/style.css +1 -1
- package/package.json +2 -2
- package/src/components/ConnectivityInfo.vue +16 -15
- package/src/components/SearchFilters.vue +13 -2
- package/src/components/SearchHistory.vue +197 -33
- package/src/components/SidebarContent.vue +36 -14
- package/src/components.d.ts +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abi-software/map-side-bar",
|
|
3
|
-
"version": "2.5.3-beta.
|
|
3
|
+
"version": "2.5.3-beta.10",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist/*",
|
|
6
6
|
"src/*",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@abi-software/gallery": "^1.1.2",
|
|
42
|
-
"@abi-software/map-utilities": "^1.2.
|
|
42
|
+
"@abi-software/map-utilities": "^1.2.2-beta.2",
|
|
43
43
|
"@abi-software/svg-sprite": "^1.0.1",
|
|
44
44
|
"@element-plus/icons-vue": "^2.3.1",
|
|
45
45
|
"algoliasearch": "^4.10.5",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
</div>
|
|
82
82
|
</div>
|
|
83
83
|
|
|
84
|
-
<div class="content-container content-container-connectivity" v-
|
|
84
|
+
<div class="content-container content-container-connectivity" v-show="activeView === 'listView'">
|
|
85
85
|
{{ entry.paths }}
|
|
86
86
|
<div v-if="entry.origins && entry.origins.length > 0" class="block">
|
|
87
87
|
<div class="attribute-title-container">
|
|
@@ -209,13 +209,15 @@
|
|
|
209
209
|
</div>
|
|
210
210
|
</div>
|
|
211
211
|
|
|
212
|
-
<div class="content-container" v-
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
212
|
+
<div class="content-container" v-show="activeView === 'graphView'">
|
|
213
|
+
<template v-if="graphViewLoaded">
|
|
214
|
+
<connectivity-graph
|
|
215
|
+
:entry="entry.featureId[0]"
|
|
216
|
+
:mapServer="envVars.FLATMAPAPI_LOCATION"
|
|
217
|
+
@tap-node="onTapNode"
|
|
218
|
+
ref="connectivityGraphRef"
|
|
219
|
+
/>
|
|
220
|
+
</template>
|
|
219
221
|
</div>
|
|
220
222
|
</div>
|
|
221
223
|
</template>
|
|
@@ -304,6 +306,7 @@ export default {
|
|
|
304
306
|
uberons: [{ id: undefined, name: undefined }],
|
|
305
307
|
connectivityError: null,
|
|
306
308
|
timeoutID: undefined,
|
|
309
|
+
graphViewLoaded: false,
|
|
307
310
|
}
|
|
308
311
|
},
|
|
309
312
|
watch: {
|
|
@@ -406,13 +409,11 @@ export default {
|
|
|
406
409
|
switchConnectivityView: function (val) {
|
|
407
410
|
this.activeView = val;
|
|
408
411
|
|
|
409
|
-
if (val === 'graphView') {
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
});
|
|
415
|
-
}
|
|
412
|
+
if (val === 'graphView' && !this.graphViewLoaded) {
|
|
413
|
+
// to load the connectivity graph only after the container is in view
|
|
414
|
+
this.$nextTick(() => {
|
|
415
|
+
this.graphViewLoaded = true;
|
|
416
|
+
});
|
|
416
417
|
}
|
|
417
418
|
},
|
|
418
419
|
onTapNode: function (data) {
|
|
@@ -168,6 +168,7 @@ export default {
|
|
|
168
168
|
showFiltersText: true,
|
|
169
169
|
cascadeSelected: [],
|
|
170
170
|
cascadeSelectedWithBoolean: [],
|
|
171
|
+
filterTimeout: null,
|
|
171
172
|
numberShown: 10,
|
|
172
173
|
filters: [],
|
|
173
174
|
facets: ['Species', 'Gender', 'Organ', 'Datasets'],
|
|
@@ -477,10 +478,18 @@ export default {
|
|
|
477
478
|
filters = [];
|
|
478
479
|
}
|
|
479
480
|
|
|
481
|
+
// timeout: add delay for filter checkboxes
|
|
482
|
+
if (this.filterTimeout) {
|
|
483
|
+
clearTimeout(this.filterTimeout);
|
|
484
|
+
}
|
|
485
|
+
|
|
480
486
|
this.$emit('loading', true) // let sidebarcontent wait for the requests
|
|
481
|
-
this.$emit('filterResults', filters) // emit filters for apps above sidebar
|
|
482
487
|
this.setCascader(filterKeys) //update our cascader v-model if we modified the event
|
|
483
|
-
|
|
488
|
+
|
|
489
|
+
this.filterTimeout = setTimeout(() => {
|
|
490
|
+
this.$emit('filterResults', filters) // emit filters for apps above sidebar
|
|
491
|
+
this.cssMods() // update css for the cascader
|
|
492
|
+
}, 400);
|
|
484
493
|
}
|
|
485
494
|
},
|
|
486
495
|
//this fucntion is needed as we previously stored booleans in the array of event that
|
|
@@ -1008,6 +1017,8 @@ export default {
|
|
|
1008
1017
|
|
|
1009
1018
|
.sidebar-cascader-popper .el-checkbox__input.is-checked .el-checkbox__inner,
|
|
1010
1019
|
.el-checkbox__input.is-indeterminate .el-checkbox__inner {
|
|
1020
|
+
--el-checkbox-checked-bg-color: #{$app-primary-color};
|
|
1021
|
+
--el-checkbox-checked-input-border-color: #{$app-primary-color};
|
|
1011
1022
|
background-color: $app-primary-color;
|
|
1012
1023
|
border-color: $app-primary-color;
|
|
1013
1024
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="history-container" v-if="searchHistory.length">
|
|
3
3
|
<div class="saved-search-history" v-if="savedSearchHistory.length">
|
|
4
|
-
<template v-for="(item, i) in savedSearchHistory">
|
|
4
|
+
<template v-for="(item, i) in savedSearchHistory" :key="item.id">
|
|
5
5
|
<el-tag
|
|
6
6
|
class="search-tag"
|
|
7
7
|
v-if="i < 2"
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
<el-popover
|
|
14
14
|
width="auto"
|
|
15
15
|
trigger="hover"
|
|
16
|
+
:show-after="200"
|
|
17
|
+
:persistent="false"
|
|
16
18
|
popper-class="popover-dropdown"
|
|
17
19
|
>
|
|
18
20
|
<template #reference>
|
|
@@ -30,7 +32,7 @@
|
|
|
30
32
|
<div v-else>
|
|
31
33
|
<span class="empty-saved-search">No Saved Searches</span>
|
|
32
34
|
</div>
|
|
33
|
-
<el-dropdown trigger="click" :
|
|
35
|
+
<el-dropdown trigger="click" :hide-on-click="false">
|
|
34
36
|
<span class="el-dropdown-select">
|
|
35
37
|
Search history
|
|
36
38
|
<el-icon class="el-icon--right">
|
|
@@ -39,22 +41,28 @@
|
|
|
39
41
|
</span>
|
|
40
42
|
<template #dropdown>
|
|
41
43
|
<el-dropdown-menu>
|
|
42
|
-
<el-dropdown-item v-for="
|
|
44
|
+
<el-dropdown-item v-for="item in searchHistory" :key="item.id">
|
|
43
45
|
<div>
|
|
44
46
|
<template v-if="item.longLabel">
|
|
45
47
|
<el-popover
|
|
46
48
|
width="auto"
|
|
47
49
|
trigger="hover"
|
|
50
|
+
:show-after="200"
|
|
51
|
+
:persistent="false"
|
|
48
52
|
popper-class="popover-dropdown"
|
|
49
53
|
>
|
|
50
54
|
<template #reference>
|
|
51
|
-
|
|
55
|
+
<span class="dropdown-clickable-item" @click="search(item)">
|
|
56
|
+
{{ item.label }}
|
|
57
|
+
</span>
|
|
52
58
|
</template>
|
|
53
59
|
{{ item.longLabel }}
|
|
54
60
|
</el-popover>
|
|
55
61
|
</template>
|
|
56
62
|
<template v-else>
|
|
57
|
-
|
|
63
|
+
<span class="dropdown-clickable-item" @click="search(item)">
|
|
64
|
+
{{ item.label }}
|
|
65
|
+
</span>
|
|
58
66
|
</template>
|
|
59
67
|
</div>
|
|
60
68
|
<div>
|
|
@@ -62,7 +70,8 @@
|
|
|
62
70
|
width="auto"
|
|
63
71
|
trigger="hover"
|
|
64
72
|
:teleported="true"
|
|
65
|
-
:show-after="
|
|
73
|
+
:show-after="200"
|
|
74
|
+
:persistent="false"
|
|
66
75
|
popper-class="popover-dropdown"
|
|
67
76
|
>
|
|
68
77
|
<template #reference>
|
|
@@ -71,8 +80,20 @@
|
|
|
71
80
|
:disabled="savedSearchHistory.length > 1 && !item.saved"
|
|
72
81
|
>
|
|
73
82
|
<el-icon color="#8300BF">
|
|
74
|
-
<
|
|
75
|
-
|
|
83
|
+
<template v-if="item.saved">
|
|
84
|
+
<svg
|
|
85
|
+
viewBox="0 0 24 24"
|
|
86
|
+
>
|
|
87
|
+
<path d="m12 21.35-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54z"></path>
|
|
88
|
+
</svg>
|
|
89
|
+
</template>
|
|
90
|
+
<template v-else>
|
|
91
|
+
<svg
|
|
92
|
+
viewBox="0 0 24 24"
|
|
93
|
+
>
|
|
94
|
+
<path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3m-4.4 15.55-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05"></path>
|
|
95
|
+
</svg>
|
|
96
|
+
</template>
|
|
76
97
|
</el-icon>
|
|
77
98
|
</el-button>
|
|
78
99
|
</template>
|
|
@@ -90,11 +111,14 @@
|
|
|
90
111
|
width="auto"
|
|
91
112
|
trigger="hover"
|
|
92
113
|
:teleported="true"
|
|
93
|
-
:show-after="
|
|
114
|
+
:show-after="200"
|
|
115
|
+
:persistent="false"
|
|
94
116
|
popper-class="popover-dropdown"
|
|
95
117
|
>
|
|
96
118
|
<template #reference>
|
|
97
|
-
<el-button circle text size="small"
|
|
119
|
+
<el-button circle text size="small"
|
|
120
|
+
@click="removeFromSavedSearch(item)"
|
|
121
|
+
>
|
|
98
122
|
<el-icon color="#8300BF">
|
|
99
123
|
<el-icon-delete />
|
|
100
124
|
</el-icon>
|
|
@@ -117,12 +141,14 @@
|
|
|
117
141
|
import {
|
|
118
142
|
ElTag as Tag,
|
|
119
143
|
ElSelect as Select,
|
|
120
|
-
ElDropdown
|
|
121
|
-
ElIcon
|
|
144
|
+
ElDropdown,
|
|
145
|
+
ElIcon,
|
|
122
146
|
} from 'element-plus'
|
|
123
147
|
|
|
124
148
|
import EventBus from './EventBus.js'
|
|
125
149
|
|
|
150
|
+
const MAX_SEARCH_HISTORY = 12;
|
|
151
|
+
|
|
126
152
|
function generateUUID() {
|
|
127
153
|
const arr = new Uint8Array(16);
|
|
128
154
|
window.crypto.getRandomValues(arr);
|
|
@@ -171,13 +197,50 @@ export default {
|
|
|
171
197
|
localStorage.removeItem('sparc.science-sidebar-search-history')
|
|
172
198
|
this.searchHistory = []
|
|
173
199
|
},
|
|
200
|
+
sortFilters(a, b) {
|
|
201
|
+
return a.facetPropPath.localeCompare(b.facetPropPath);
|
|
202
|
+
},
|
|
203
|
+
// Sort by saved and updated
|
|
204
|
+
sortSearchHistory(a, b) {
|
|
205
|
+
if (a.saved !== b.saved) {
|
|
206
|
+
return b.saved - a.saved;
|
|
207
|
+
}
|
|
208
|
+
if (a.updated !== b.updated) {
|
|
209
|
+
return b.updated - a.updated;
|
|
210
|
+
}
|
|
211
|
+
return 0;
|
|
212
|
+
},
|
|
213
|
+
formatFilters(filterItem) {
|
|
214
|
+
// because filters do not work correctly with facet2
|
|
215
|
+
if (filterItem.facet2) {
|
|
216
|
+
filterItem.facet = filterItem.facet2;
|
|
217
|
+
delete filterItem.facet2;
|
|
218
|
+
}
|
|
219
|
+
return filterItem;
|
|
220
|
+
},
|
|
174
221
|
addSearchToHistory(filters = [], search = '') {
|
|
175
222
|
search = search.trim() // remove whitespace
|
|
176
223
|
|
|
177
|
-
const isExistingItem = this.searchHistory.some((item) =>
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
224
|
+
const isExistingItem = this.searchHistory.some((item) => {
|
|
225
|
+
let historyFilters = item.filters;
|
|
226
|
+
let newFilters = filters;
|
|
227
|
+
|
|
228
|
+
// make all filters same format
|
|
229
|
+
historyFilters.forEach((filter) => this.formatFilters(filter));
|
|
230
|
+
newFilters.forEach((filter) => this.formatFilters(filter));
|
|
231
|
+
|
|
232
|
+
// sort filters (to check duplicates in string format)
|
|
233
|
+
historyFilters = historyFilters.sort(this.sortFilters);
|
|
234
|
+
newFilters = newFilters.sort(this.sortFilters);
|
|
235
|
+
|
|
236
|
+
const historyFiltersString = JSON.stringify(historyFilters);
|
|
237
|
+
const newFiltersString = JSON.stringify(newFilters);
|
|
238
|
+
|
|
239
|
+
return (
|
|
240
|
+
item.search === search &&
|
|
241
|
+
historyFiltersString === newFiltersString
|
|
242
|
+
);
|
|
243
|
+
});
|
|
181
244
|
|
|
182
245
|
if (!isExistingItem) {
|
|
183
246
|
const {label, longLabel} = this.searchHistoryItemLabel(search, filters);
|
|
@@ -193,6 +256,11 @@ export default {
|
|
|
193
256
|
|
|
194
257
|
this.searchHistory.push(newItem);
|
|
195
258
|
|
|
259
|
+
this.searchHistory = this.searchHistory.sort(this.sortSearchHistory);
|
|
260
|
+
|
|
261
|
+
// trim search history to 12 items
|
|
262
|
+
this.trimSearchHistory();
|
|
263
|
+
|
|
196
264
|
// Save new data
|
|
197
265
|
localStorage.setItem(
|
|
198
266
|
'sparc.science-sidebar-search-history',
|
|
@@ -200,35 +268,91 @@ export default {
|
|
|
200
268
|
);
|
|
201
269
|
}
|
|
202
270
|
},
|
|
271
|
+
/**
|
|
272
|
+
* Remove the duplicate items in search history.
|
|
273
|
+
*/
|
|
274
|
+
removeDuplicateSearchHistory: function () {
|
|
275
|
+
const keys = [];
|
|
276
|
+
const duplicateItemIDs = [];
|
|
277
|
+
|
|
278
|
+
this.searchHistory.forEach((item) => {
|
|
279
|
+
const key = `${item.search}-${JSON.stringify(item.filters)}`;
|
|
280
|
+
const existingItem = keys.find(k => k.key === key);
|
|
281
|
+
// duplicate item
|
|
282
|
+
if (existingItem) {
|
|
283
|
+
// if current item is saved item
|
|
284
|
+
// add the other item into duplicates
|
|
285
|
+
if (item.saved) {
|
|
286
|
+
duplicateItemIDs.push(existingItem.id);
|
|
287
|
+
} else {
|
|
288
|
+
duplicateItemIDs.push(item.id);
|
|
289
|
+
}
|
|
290
|
+
} else {
|
|
291
|
+
keys.push({
|
|
292
|
+
id: item.id,
|
|
293
|
+
key: key
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
if (duplicateItemIDs.length) {
|
|
299
|
+
this.searchHistory = this.searchHistory.filter((item) => !duplicateItemIDs.includes(item.id));
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
/**
|
|
303
|
+
* Function to trim search history to maximum items,
|
|
304
|
+
*/
|
|
305
|
+
trimSearchHistory: function () {
|
|
306
|
+
// since saved has max 2
|
|
307
|
+
// remove extra from unsaved
|
|
308
|
+
if (this.searchHistory.length > MAX_SEARCH_HISTORY) {
|
|
309
|
+
const savedItems = this.searchHistory.filter((item) => item.saved);
|
|
310
|
+
const unsavedItems = this.searchHistory.filter((item) => !item.saved);
|
|
311
|
+
const extra = MAX_SEARCH_HISTORY - this.searchHistory.length;
|
|
312
|
+
|
|
313
|
+
this.searchHistory = [
|
|
314
|
+
...savedItems,
|
|
315
|
+
...unsavedItems.slice(0, extra),
|
|
316
|
+
];
|
|
317
|
+
}
|
|
318
|
+
},
|
|
203
319
|
updateSearchHistory: function () {
|
|
204
320
|
// Update for missing attributes
|
|
205
321
|
this.searchHistory.forEach((item) => {
|
|
206
322
|
if (!item.id) {
|
|
207
323
|
item['id'] = generateUUID();
|
|
208
324
|
}
|
|
325
|
+
|
|
209
326
|
if (!item.label) {
|
|
210
327
|
const {label, longLabel} = this.searchHistoryItemLabel(item.search, item.filters);
|
|
211
328
|
item['label'] = label;
|
|
212
329
|
item['longLabel'] = longLabel;
|
|
213
330
|
}
|
|
331
|
+
|
|
332
|
+
// make all filters same format
|
|
333
|
+
item.filters.forEach((filter) =>
|
|
334
|
+
this.formatFilters(filter)
|
|
335
|
+
);
|
|
336
|
+
|
|
337
|
+
// sort filters (to check duplicates in string format)
|
|
338
|
+
item.filters = item.filters.sort(this.sortFilters);
|
|
339
|
+
|
|
214
340
|
if (!item.saved) {
|
|
215
341
|
item['saved'] = false;
|
|
216
342
|
}
|
|
343
|
+
|
|
217
344
|
if (!item.updated) {
|
|
218
345
|
item['updated'] = (new Date()).getTime();
|
|
219
346
|
}
|
|
220
347
|
});
|
|
221
348
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
return 0;
|
|
231
|
-
});
|
|
349
|
+
this.searchHistory = this.searchHistory.sort(this.sortSearchHistory);
|
|
350
|
+
|
|
351
|
+
// check and remove duplicates
|
|
352
|
+
this.removeDuplicateSearchHistory();
|
|
353
|
+
|
|
354
|
+
// trim search history to 12 items
|
|
355
|
+
this.trimSearchHistory();
|
|
232
356
|
|
|
233
357
|
// Save updated data
|
|
234
358
|
localStorage.setItem(
|
|
@@ -315,7 +439,7 @@ export default {
|
|
|
315
439
|
|
|
316
440
|
.search-tag.el-tag {
|
|
317
441
|
margin: 0;
|
|
318
|
-
cursor: pointer;
|
|
442
|
+
cursor: pointer !important;
|
|
319
443
|
background: #f9f2fc!important;
|
|
320
444
|
border-color: $app-primary-color!important;
|
|
321
445
|
color:$app-primary-color!important;
|
|
@@ -324,6 +448,7 @@ export default {
|
|
|
324
448
|
max-width: 15ch;
|
|
325
449
|
overflow: hidden;
|
|
326
450
|
text-overflow: ellipsis;
|
|
451
|
+
line-height: 24px;
|
|
327
452
|
}
|
|
328
453
|
}
|
|
329
454
|
|
|
@@ -351,7 +476,6 @@ export default {
|
|
|
351
476
|
transition: var(--el-transition-duration);
|
|
352
477
|
transform: translateZ(0);
|
|
353
478
|
box-shadow: 0 0 0 1px var(--el-border-color) inset;
|
|
354
|
-
cursor: pointer;
|
|
355
479
|
}
|
|
356
480
|
|
|
357
481
|
.el-dropdown-select {
|
|
@@ -385,6 +509,14 @@ export default {
|
|
|
385
509
|
overflow: hidden;
|
|
386
510
|
}
|
|
387
511
|
|
|
512
|
+
.dropdown-clickable-item {
|
|
513
|
+
cursor: pointer;
|
|
514
|
+
|
|
515
|
+
&:hover {
|
|
516
|
+
color: $app-primary-color;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
388
520
|
+ .el-dropdown-menu__item {
|
|
389
521
|
&::before {
|
|
390
522
|
content: "";
|
|
@@ -399,8 +531,8 @@ export default {
|
|
|
399
531
|
&:hover,
|
|
400
532
|
&:focus,
|
|
401
533
|
&:active {
|
|
402
|
-
color: inherit;
|
|
403
|
-
background-color: var(--el-
|
|
534
|
+
color: inherit !important;
|
|
535
|
+
background-color: var(--el-fill-color-light) !important;
|
|
404
536
|
}
|
|
405
537
|
|
|
406
538
|
i {
|
|
@@ -410,7 +542,7 @@ export default {
|
|
|
410
542
|
</style>
|
|
411
543
|
|
|
412
544
|
<style lang="scss">
|
|
413
|
-
.el-dropdown__popper {
|
|
545
|
+
.el-popper.el-dropdown__popper {
|
|
414
546
|
font-family: Asap;
|
|
415
547
|
font-size: 14px;
|
|
416
548
|
font-weight: 400;
|
|
@@ -422,8 +554,38 @@ export default {
|
|
|
422
554
|
min-width: 180px;
|
|
423
555
|
width: fit-content;
|
|
424
556
|
|
|
425
|
-
.el-button
|
|
426
|
-
|
|
557
|
+
.el-button {
|
|
558
|
+
background-color: transparent !important;
|
|
559
|
+
transition: all .25s ease;
|
|
560
|
+
|
|
561
|
+
> span {
|
|
562
|
+
pointer-events: none;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
&:hover,
|
|
566
|
+
&:focus {
|
|
567
|
+
background-color: transparent !important;
|
|
568
|
+
box-shadow: none !important;
|
|
569
|
+
border: 0 none !important;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
&:not([disabled]) {
|
|
573
|
+
&:hover,
|
|
574
|
+
&:focus {
|
|
575
|
+
background-color: #f3e6f9 !important;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
+ .el-button {
|
|
580
|
+
margin: 0;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// element plus's dropdown max-height has problem
|
|
585
|
+
.el-dropdown__list {
|
|
586
|
+
max-height: 350px;
|
|
587
|
+
overflow-y: auto;
|
|
588
|
+
scrollbar-width: thin;
|
|
427
589
|
}
|
|
428
590
|
}
|
|
429
591
|
|
|
@@ -433,6 +595,8 @@ export default {
|
|
|
433
595
|
max-width: 240px;
|
|
434
596
|
font-family: Asap;
|
|
435
597
|
font-size: 12px;
|
|
598
|
+
word-break: break-word;
|
|
599
|
+
text-align: left;
|
|
436
600
|
color: inherit;
|
|
437
601
|
background: #f3ecf6 !important;
|
|
438
602
|
border: 1px solid $app-primary-color;
|
|
@@ -173,7 +173,7 @@ export default {
|
|
|
173
173
|
this.results = []
|
|
174
174
|
this.loadingCards = false
|
|
175
175
|
},
|
|
176
|
-
openSearch: function (filter, search = '') {
|
|
176
|
+
openSearch: function (filter, search = '', option = { withSearch: true }) {
|
|
177
177
|
this.searchInput = search
|
|
178
178
|
this.resetPageNavigation()
|
|
179
179
|
//Proceed normally if cascader is ready
|
|
@@ -192,14 +192,16 @@ export default {
|
|
|
192
192
|
this.$refs.filtersRef.checkShowAllBoxes()
|
|
193
193
|
this.resetSearch()
|
|
194
194
|
} else if (this.filter) {
|
|
195
|
-
|
|
195
|
+
if (option.withSearch) {
|
|
196
|
+
this.searchAlgolia(this.filter, search)
|
|
197
|
+
}
|
|
196
198
|
this.$refs.filtersRef.setCascader(this.filter)
|
|
197
199
|
}
|
|
198
200
|
} else {
|
|
199
201
|
//cascader is not ready, perform search if no filter is set,
|
|
200
202
|
//otherwise waith for cascader to be ready
|
|
201
203
|
this.filter = filter
|
|
202
|
-
if (!filter || filter.length == 0) {
|
|
204
|
+
if ((!filter || filter.length == 0) && option.withSearch) {
|
|
203
205
|
this.searchAlgolia(this.filter, search)
|
|
204
206
|
}
|
|
205
207
|
}
|
|
@@ -224,13 +226,12 @@ export default {
|
|
|
224
226
|
this.openSearch(this.filter, this.searchInput)
|
|
225
227
|
},
|
|
226
228
|
clearSearchClicked: function () {
|
|
227
|
-
this.searchInput = ''
|
|
228
|
-
this.
|
|
229
|
-
this.searchAlgolia(this.filters, this.searchInput)
|
|
230
|
-
this.$refs.searchHistory.selectValue = 'Search history'
|
|
229
|
+
this.searchInput = '';
|
|
230
|
+
this.searchAndFilterUpdate();
|
|
231
231
|
},
|
|
232
232
|
searchEvent: function (event = false) {
|
|
233
233
|
if (event.keyCode === 13 || event instanceof MouseEvent) {
|
|
234
|
+
this.searchInput = this.searchInput.trim();
|
|
234
235
|
this.searchAndFilterUpdate();
|
|
235
236
|
}
|
|
236
237
|
},
|
|
@@ -242,9 +243,23 @@ export default {
|
|
|
242
243
|
type: 'filter-update',
|
|
243
244
|
})
|
|
244
245
|
},
|
|
246
|
+
/**
|
|
247
|
+
* Transform filters for third level items to perform search
|
|
248
|
+
* because cascader keeps adding it back.
|
|
249
|
+
*/
|
|
250
|
+
transformFiltersBeforeSearch: function (filters) {
|
|
251
|
+
return filters.map((filter) => {
|
|
252
|
+
if (filter.facet2) {
|
|
253
|
+
filter.facet = filter.facet2;
|
|
254
|
+
delete filter.facet2;
|
|
255
|
+
}
|
|
256
|
+
return filter;
|
|
257
|
+
});
|
|
258
|
+
},
|
|
245
259
|
searchAndFilterUpdate: function () {
|
|
246
260
|
this.resetPageNavigation();
|
|
247
|
-
this.
|
|
261
|
+
const transformedFilters = this.transformFiltersBeforeSearch(this.filters);
|
|
262
|
+
this.searchAlgolia(transformedFilters, this.searchInput);
|
|
248
263
|
this.$refs.searchHistory.selectValue = 'Search history';
|
|
249
264
|
// save history only if there has value
|
|
250
265
|
if (this.filters.length || this.searchInput?.trim()) {
|
|
@@ -445,7 +460,9 @@ export default {
|
|
|
445
460
|
searchHistorySearch: function (item) {
|
|
446
461
|
this.searchInput = item.search
|
|
447
462
|
this.filters = item.filters
|
|
448
|
-
this.
|
|
463
|
+
this.searchAndFilterUpdate();
|
|
464
|
+
// withSearch: false to prevent algoliaSearch in openSearch
|
|
465
|
+
this.openSearch([...item.filters], item.search, { withSearch: false });
|
|
449
466
|
},
|
|
450
467
|
},
|
|
451
468
|
mounted: function () {
|
|
@@ -493,6 +510,9 @@ export default {
|
|
|
493
510
|
height: 100%;
|
|
494
511
|
flex-flow: column;
|
|
495
512
|
display: flex;
|
|
513
|
+
border: 0;
|
|
514
|
+
border-top-right-radius: 0;
|
|
515
|
+
border-bottom-right-radius: 0;
|
|
496
516
|
}
|
|
497
517
|
|
|
498
518
|
.step-item {
|
|
@@ -505,15 +525,16 @@ export default {
|
|
|
505
525
|
width: 298px !important;
|
|
506
526
|
height: 40px;
|
|
507
527
|
padding-right: 14px;
|
|
508
|
-
|
|
528
|
+
|
|
529
|
+
:deep(.el-input__inner) {
|
|
530
|
+
font-family: inherit;
|
|
531
|
+
}
|
|
509
532
|
}
|
|
510
533
|
|
|
511
534
|
.header {
|
|
512
|
-
border: solid 1px #292b66;
|
|
513
|
-
background-color: #292b66;
|
|
514
|
-
text-align: left;
|
|
515
|
-
|
|
516
535
|
.el-button {
|
|
536
|
+
font-family: inherit;
|
|
537
|
+
|
|
517
538
|
&:hover,
|
|
518
539
|
&:focus {
|
|
519
540
|
background: $app-primary-color;
|
|
@@ -566,6 +587,7 @@ export default {
|
|
|
566
587
|
background-color: #ffffff;
|
|
567
588
|
overflow-y: scroll;
|
|
568
589
|
scrollbar-width: thin;
|
|
590
|
+
border-radius: var(--el-border-radius-base);
|
|
569
591
|
}
|
|
570
592
|
|
|
571
593
|
.content :deep(.el-loading-spinner .path) {
|
package/src/components.d.ts
CHANGED
|
@@ -25,8 +25,6 @@ declare module 'vue' {
|
|
|
25
25
|
ElIconArrowRight: typeof import('@element-plus/icons-vue')['ArrowRight']
|
|
26
26
|
ElIconDelete: typeof import('@element-plus/icons-vue')['Delete']
|
|
27
27
|
ElIconLocation: typeof import('@element-plus/icons-vue')['Location']
|
|
28
|
-
ElIconStar: typeof import('@element-plus/icons-vue')['Star']
|
|
29
|
-
ElIconStarFilled: typeof import('@element-plus/icons-vue')['StarFilled']
|
|
30
28
|
ElIconWarning: typeof import('@element-plus/icons-vue')['Warning']
|
|
31
29
|
ElIconWarnTriangleFilled: typeof import('@element-plus/icons-vue')['WarnTriangleFilled']
|
|
32
30
|
ElInput: typeof import('element-plus/es')['ElInput']
|