@abi-software/map-side-bar 2.11.3 → 2.11.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abi-software/map-side-bar",
3
- "version": "2.11.3",
3
+ "version": "2.11.4",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@abi-software/gallery": "^1.2.0",
47
- "@abi-software/map-utilities": "1.7.6",
47
+ "@abi-software/map-utilities": "1.7.7",
48
48
  "@abi-software/svg-sprite": "^1.0.2",
49
49
  "@element-plus/icons-vue": "^2.3.1",
50
50
  "algoliasearch": "^4.10.5",
@@ -3,14 +3,56 @@
3
3
  <MapSvgSpriteColor />
4
4
  <template #header>
5
5
  <div class="header">
6
- <el-input
7
- class="search-input"
8
- placeholder="Search"
9
- v-model="searchInput"
10
- @keyup="searchEvent"
11
- clearable
12
- @clear="clearSearchClicked"
13
- ></el-input>
6
+ <div class="search-input-container" :class="{'is-focus': inputFocus}">
7
+ <el-input
8
+ class="search-input"
9
+ placeholder="Search"
10
+ v-model="searchInput"
11
+ @focus="onInputFocus"
12
+ @blur="onInputBlur"
13
+ @input="onInputChange"
14
+ @keyup="searchEvent"
15
+ clearable
16
+ @clear="clearSearchClicked"
17
+ ></el-input>
18
+ <el-popover
19
+ width="350"
20
+ trigger="hover"
21
+ popper-class="filter-help-popover"
22
+ >
23
+ <template #reference>
24
+ <MapSvgIcon icon="help" class="help" />
25
+ </template>
26
+ <div>
27
+ <strong>Search rules:</strong>
28
+ <ul>
29
+ <li>
30
+ <strong>Partial Matching:</strong> You don't need to type the full word or ID.
31
+ The search will find items that contain your search term.
32
+ </li>
33
+ <li>
34
+ <strong>Multiple Terms:</strong> Separate terms with a comma (<code>,</code>).
35
+ This will find pathways that match any of the terms (an "OR" search).
36
+ </li>
37
+ </ul>
38
+ <br/>
39
+ <strong>Examples:</strong>
40
+ <ul>
41
+ <li>
42
+ <strong>To find by partial ID:</strong>
43
+ Searching for <code>kidney/132</code> will match the full <strong>Pathway ID</strong> <code>ilxtr:sparc-nlp/kidney/132</code>
44
+ </li>
45
+ <li>
46
+ <strong>To find by keyword:</strong>
47
+ Searching for (<code>vagus nerve</code>) will match <strong>pathways</strong> that have <code>vagus nerve</code> in their title OR are linked to a related component (like UBERON:0001759).
48
+ </li>
49
+ <li>
50
+ <strong>To find by multiple terms:</strong>
51
+ Searching for <code>kidney</code>, <code>vagus nerve</code> will find pathways that are related to either <code>kidney</code> OR <code>vagus nerve</code>.</li>
52
+ </ul>
53
+ </div>
54
+ </el-popover>
55
+ </div>
14
56
  <el-button
15
57
  type="primary"
16
58
  class="button"
@@ -216,6 +258,7 @@ export default {
216
258
  expanded: "",
217
259
  filterVisibility: true,
218
260
  expandedData: null,
261
+ inputFocus: false,
219
262
  };
220
263
  },
221
264
  computed: {
@@ -250,6 +293,7 @@ export default {
250
293
  this.$refs.filtersRef.checkShowAllBoxes();
251
294
  this.searchInput = '';
252
295
  this.filter = [];
296
+ this.updateInputFocus();
253
297
  }
254
298
  }
255
299
  },
@@ -306,6 +350,7 @@ export default {
306
350
  onConnectivityClicked: function (data) {
307
351
  this.searchInput = data.query;
308
352
  this.searchAndFilterUpdate();
353
+ this.updateInputFocus();
309
354
  },
310
355
  collapseChange:function (data) {
311
356
  this.expanded = this.expanded === data.id ? "" : data.id;
@@ -380,6 +425,7 @@ export default {
380
425
  },
381
426
  openSearch: function (filter, search = "") {
382
427
  this.searchInput = search;
428
+ this.updateInputFocus();
383
429
  this.resetPageNavigation();
384
430
  //Proceed normally if cascader is ready
385
431
  if (this.cascaderIsReady) {
@@ -468,13 +514,27 @@ export default {
468
514
  clearSearchClicked: function () {
469
515
  this.searchInput = "";
470
516
  this.searchAndFilterUpdate();
517
+ this.updateInputFocus();
471
518
  },
472
519
  searchEvent: function (event = false) {
473
520
  if (event.keyCode === 13 || event instanceof MouseEvent) {
474
521
  this.searchInput = this.searchInput.trim();
475
522
  this.searchAndFilterUpdate();
523
+ this.updateInputFocus();
476
524
  }
477
525
  },
526
+ updateInputFocus: function () {
527
+ this.inputFocus = this.searchInput ? true : false;
528
+ },
529
+ onInputFocus: function () {
530
+ this.updateInputFocus();
531
+ },
532
+ onInputBlur: function () {
533
+ this.updateInputFocus();
534
+ },
535
+ onInputChange: function () {
536
+ this.updateInputFocus();
537
+ },
478
538
  filterUpdate: function (filters) {
479
539
  this.filter = [...filters];
480
540
  this.searchAndFilterUpdate();
@@ -554,6 +614,7 @@ export default {
554
614
  this.searchInput = item.search;
555
615
  this.filter = item.filters;
556
616
  this.openSearch([...item.filters], item.search);
617
+ this.updateInputFocus();
557
618
  },
558
619
  onConnectivityInfoLoaded: function (result) {
559
620
  const stepItemRef = this.$refs['stepItem-' + result.id];
@@ -650,6 +711,24 @@ export default {
650
711
  }
651
712
  }
652
713
 
714
+ .search-input-container {
715
+ position: relative;
716
+ display: flex;
717
+ align-items: center;
718
+
719
+ .map-icon {
720
+ position: absolute;
721
+ right: 18px;
722
+ color: $app-primary-color !important;
723
+ }
724
+
725
+ &.is-focus {
726
+ .map-icon {
727
+ display: none;
728
+ }
729
+ }
730
+ }
731
+
653
732
  .header {
654
733
  display: flex;
655
734
  align-items: center;
@@ -811,5 +890,9 @@ export default {
811
890
  border-bottom-color: transparent !important;
812
891
  border-right-color: transparent !important;
813
892
  }
893
+
894
+ code {
895
+ font-size: 90%;
896
+ }
814
897
  }
815
898
  </style>