@abi-software/map-side-bar 1.3.36 → 2.0.0-response.0

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.36",
3
+ "version": "1.3.37",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -88,9 +88,9 @@
88
88
  }
89
89
  },
90
90
  "@abi-software/svg-sprite": {
91
- "version": "0.1.14",
92
- "resolved": "https://registry.npmjs.org/@abi-software/svg-sprite/-/svg-sprite-0.1.14.tgz",
93
- "integrity": "sha512-nCIgBLfiAV8gMHD+lYCRWCT+y2GM8g/88DG8sjfu5F+wz6M82wA/Y69SVlMTJ7TQiFIlCguxYb4RltUGpo2YCg==",
91
+ "version": "0.2.0",
92
+ "resolved": "https://registry.npmjs.org/@abi-software/svg-sprite/-/svg-sprite-0.2.0.tgz",
93
+ "integrity": "sha512-vK/D4Wd9ntg/b7B5o2FPK2CtFrqNuuNHBOCWbZlvtrVvk90WH9JgJWx1+UPPzzTmrKRCvwE24osF/nQef206vg==",
94
94
  "requires": {
95
95
  "core-js": "^3.6.5",
96
96
  "svg-inline-loader": "^0.8.2",
@@ -98,9 +98,9 @@
98
98
  },
99
99
  "dependencies": {
100
100
  "core-js": {
101
- "version": "3.20.3",
102
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz",
103
- "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag=="
101
+ "version": "3.30.0",
102
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.0.tgz",
103
+ "integrity": "sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg=="
104
104
  }
105
105
  }
106
106
  },
@@ -11473,7 +11473,7 @@
11473
11473
  "simple-html-tokenizer": {
11474
11474
  "version": "0.1.1",
11475
11475
  "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz",
11476
- "integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4="
11476
+ "integrity": "sha512-Mc/gH3RvlKvB/gkp9XwgDKEWrSYyefIJPGG8Jk1suZms/rISdUuVEMx5O1WBnTWaScvxXDvGJrZQWblUmQHjkQ=="
11477
11477
  },
11478
11478
  "simple-swizzle": {
11479
11479
  "version": "0.2.2",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abi-software/map-side-bar",
3
- "version": "1.3.36",
3
+ "version": "2.0.0-response.0",
4
4
  "main": "./dist/map-side-bar.common.js",
5
5
  "files": [
6
6
  "dist/*",
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "dependencies": {
20
20
  "@abi-software/gallery": "^0.3.2",
21
- "@abi-software/svg-sprite": "^0.1.14",
21
+ "@abi-software/svg-sprite": "^0.2.0",
22
22
  "algoliasearch": "^4.10.5",
23
23
  "element-ui": "^2.13.0",
24
24
  "marked": "^4.1.1",
package/src/App.vue CHANGED
@@ -12,7 +12,8 @@
12
12
  <el-button @click="keywordSearch">keyword search</el-button>
13
13
  <SideBar :envVars="envVars" class="side-bar" ref="sideBar" :visible="sideBarVisibility"
14
14
  :tabs="tabs" :activeId="activeId" @tabClicked="tabClicked"
15
- @search-changed="searchChanged($event)" @actionClick="action"/>
15
+ @search-changed="searchChanged($event)" @actionClick="action"
16
+ :alternate-search="mySearch"/>
16
17
  </div>
17
18
  </template>
18
19
 
@@ -20,7 +21,9 @@
20
21
  /* eslint-disable no-alert, no-console */
21
22
  // optionally import default styles
22
23
  import SideBar from './components/SideBar'
24
+ import { mySearch } from './demo/AlternateResponse.js'
23
25
 
26
+ console.log(mySearch)
24
27
  // let testContext = {
25
28
  // "description": "3D digital tracings of the enteric plexus obtained from seven subjects (M11, M16, M162, M163, M164, M168) are mapped randomly on mouse proximal colon. The data depicts individual neural wiring patterns in enteric microcircuits, and revealed both neuron and fiber units wired in a complex organization.",
26
29
  // "heading": "Digital tracings of enteric plexus",
@@ -95,6 +98,8 @@ export default {
95
98
  ROOT_URL: process.env.VUE_APP_ROOT_URL,
96
99
  },
97
100
  activeId: 1,
101
+ mySearch: mySearch,
102
+ //mySearch: undefined,
98
103
  }
99
104
  },
100
105
  methods:{
@@ -149,4 +154,7 @@ export default {
149
154
  body {
150
155
  margin:0px;
151
156
  }
157
+ .map-icon {
158
+ color: #8300bf;
159
+ }
152
160
  </style>
@@ -75,7 +75,10 @@ export default {
75
75
  categoryClicked: function(name) {
76
76
  this.active = name;
77
77
  this.$emit("categoryChanged", name);
78
- }
78
+ },
79
+ resetCategory: function() {
80
+ this.categories = { All: { size: 1 }, Dataset: { size: 1 } };
81
+ },
79
82
  },
80
83
  watch: {
81
84
  datasetBiolucida: {
@@ -91,6 +94,7 @@ export default {
91
94
  deep: true,
92
95
  immediate: true,
93
96
  handler: function () {
97
+ this.resetCategory();
94
98
  this.addToCategories(this.entry.scaffolds, 'Scaffolds');
95
99
  this.addToCategories(this.entry.segmentation, 'Segmentations');
96
100
  this.addToCategories(this.entry.plots, 'Plots');
@@ -4,9 +4,10 @@
4
4
  <div class="seperator-path"></div>
5
5
  <div v-loading="loading" class="card" >
6
6
  <span class="card-left">
7
- <image-gallery v-if="!loading && discoverId"
8
- :datasetId="discoverId"
7
+ <image-gallery v-if="!loading && datasetId"
8
+ :datasetId="datasetId"
9
9
  :datasetVersion="version"
10
+ :dataLocation="dataLocation"
10
11
  :entry="entry"
11
12
  :envVars="envVars"
12
13
  :label="label"
@@ -14,6 +15,7 @@
14
15
  :dataset-biolucida="biolucidaData"
15
16
  :category="currentCategory"
16
17
  @card-clicked="galleryClicked"
18
+ :key="datasetId"
17
19
  />
18
20
  </span>
19
21
  <div class="card-right" >
@@ -56,6 +58,11 @@ Vue.use(Icon);
56
58
  export default {
57
59
  name: "DatasetCard",
58
60
  components: { BadgesGroup, ImageGallery },
61
+ inject: {
62
+ 'alternateSearch' : {
63
+ default: undefined,
64
+ },
65
+ },
59
66
  props: {
60
67
  /**
61
68
  * Object containing information for
@@ -74,7 +81,7 @@ export default {
74
81
  return {
75
82
  thumbnail: require('@/../assets/missing-image.svg'),
76
83
  dataLocation: this.entry.doi,
77
- discoverId: undefined,
84
+ datasetId: undefined,
78
85
  loading: true,
79
86
  version: 1,
80
87
  lastDoi: undefined,
@@ -99,7 +106,8 @@ export default {
99
106
  samples: function() {
100
107
  let text = "";
101
108
  if (this.entry.species) {
102
- if (speciesMap[this.entry.species[0].toLowerCase()]){
109
+ if (this.entry.species.length > 0 &&
110
+ speciesMap[this.entry.species[0].toLowerCase()]) {
103
111
  text = `${speciesMap[this.entry.species[0].toLowerCase()]}`;
104
112
  } else {
105
113
  text = `${this.entry.species}`;
@@ -188,21 +196,37 @@ export default {
188
196
  })
189
197
  .then((data) => {
190
198
  this.thumbnail = data.banner
191
- this.discoverId = data.id
199
+ this.datasetId = data.id
192
200
  this.version = data.version
193
- this.dataLocation = `https://sparc.science/datasets/${data.id}?type=dataset`
194
- this.getBiolucidaInfo(this.discoverId)
201
+ this.dataLocation = `${this.envVars.ROOT_URL}/datasets/${data.id}?type=dataset`
202
+ this.getBiolucidaInfo(this.datasetId)
195
203
  this.loading = false
196
204
  })
197
205
  .catch(() => {
198
206
  //set defaults if we hit an error
199
207
  this.thumbnail = require('@/../assets/missing-image.svg')
200
- this.discoverId = Number(this.entry.datasetId)
208
+ this.datasetId = Number(this.entry.datasetId)
201
209
  this.loading = false
202
210
  });
203
211
  }
204
212
 
205
213
  },
214
+ initialise: function() {
215
+ if (!this.alternateSearch) {
216
+ this.getBanner();
217
+ } else {
218
+ this.dataLocation = this.entry.data_url;
219
+ this.datasetId = this.entry.datasetId;
220
+ if (this.entry.scaffoldViews.length > 0) {
221
+ this.thumbnail = this.entry.scaffoldViews[0].image_url;
222
+ } else if (this.entry.thumbnails.length > 0) {
223
+ this.thumbnail = this.entry.thumbnails[0].image_url;
224
+ } else {
225
+ this.thumbnail = require("@/../assets/missing-image.svg");
226
+ }
227
+ this.loading = false;
228
+ }
229
+ },
206
230
  lastName: function(fullName){
207
231
  return fullName.split(',')[0]
208
232
  },
@@ -219,12 +243,12 @@ export default {
219
243
  }
220
244
  },
221
245
  created: function() {
222
- this.getBanner()
246
+ this.initialise();
223
247
  },
224
248
  watch: {
225
249
  // currently not using card overflow
226
- 'entry.description': function() { // watch it
227
- this.getBanner()
250
+ 'entry.datasetId': function() { // watch it
251
+ this.initialise();
228
252
  }
229
253
  },
230
254
  };
@@ -257,7 +281,7 @@ export default {
257
281
  }
258
282
 
259
283
  .card-left{
260
- flex: 1
284
+ flex: 1;
261
285
  }
262
286
 
263
287
  .card-right {
@@ -37,6 +37,11 @@ import "@abi-software/gallery/dist/gallery.css";
37
37
  export default {
38
38
  name: "ImageGallery",
39
39
  components: { Gallery },
40
+ inject: {
41
+ 'alternateSearch' : {
42
+ default: undefined,
43
+ },
44
+ },
40
45
  mixins: [GalleryHelper, S3Bucket],
41
46
  props: {
42
47
  datasetBiolucida: {
@@ -59,9 +64,10 @@ export default {
59
64
  return [];
60
65
  },
61
66
  },
62
- datasetId: {
63
- type: Number,
64
- default: -1,
67
+ datasetId: [String, Number],
68
+ dataLocation: {
69
+ type: String,
70
+ default: "",
65
71
  },
66
72
  datasetVersion: {
67
73
  type: Number,
@@ -117,9 +123,10 @@ export default {
117
123
  this.$emit('card-clicked', payload);
118
124
  },
119
125
  createSciCurnchItems: function () {
120
- this.updateS3Bucket(this.entry.s3uri);
126
+ if (this.entry.s3uri) this.updateS3Bucket(this.entry.s3uri);
121
127
  this.createDatasetItem();
122
- this.createScaffoldItems();
128
+ if (this.alternateSearch) this.createScaffoldViewItems();
129
+ else this.createScaffoldItems();
123
130
  this.createSimulationItems();
124
131
  this.createPlotItems();
125
132
  this.createSegmentationItems();
@@ -129,13 +136,17 @@ export default {
129
136
  */
130
137
  },
131
138
  createDatasetItem: function () {
132
- const link = `${this.envVars.ROOT_URL}/datasets/${this.datasetId}?type=dataset`
139
+ const link = this.dataLocation;
140
+ let name = String(this.datasetId);
141
+ if (name.length <= 5) name = `Dataset ${name}`;
142
+ else name = "Dataset";
143
+
133
144
  if (this.datasetThumbnail) {
134
145
  this.items['Dataset'].push({
135
146
  id: -1,
136
147
  //Work around gallery requires a truthy string
137
148
  title: " ",
138
- type: `Dataset ${this.datasetId}`,
149
+ type: name,
139
150
  thumbnail: this.datasetThumbnail,
140
151
  link,
141
152
  hideType: true,
@@ -164,28 +175,44 @@ export default {
164
175
  this.entry.plots.forEach((plot) => {
165
176
  const filePath = plot.dataset.path;
166
177
  const id = plot.identifier;
167
- const thumbnail = this.getThumbnailForPlot(plot, this.entry.thumbnails);
168
178
  let thumbnailURL = undefined;
169
179
  let mimetype = '';
170
- if (thumbnail) {
171
- thumbnailURL = this.getImageURLFromS3(this.envVars.API_LOCATION, {
172
- id,
173
- datasetId: this.datasetId,
174
- datasetVersion: this.datasetVersion,
175
- file_path: thumbnail.dataset.path,
176
- s3Bucket: this.s3Bucket,
177
- });
178
- mimetype = thumbnail.mimetype.name;
179
- }
180
+ let supplementalData = [];
181
+ let sourceUrl = "";
182
+ let metadata = undefined;
183
+ let filePathPrefix = ""; `${this.envVars.API_LOCATION}/s3-resource/${this.datasetId}/${this.datasetVersion}/files/`;
180
184
  const plotAnnotation = plot.datacite;
181
- const filePathPrefix = `${this.envVars.API_LOCATION}/s3-resource/${this.datasetId}/${this.datasetVersion}/files/`;
182
- const sourceUrl = filePathPrefix + plot.dataset.path + this.getS3Args();
183
185
 
184
- const metadata = JSON.parse(
185
- plotAnnotation.supplemental_json_metadata.description
186
- );
186
+ if (!this.alternateSearch) {
187
+ const thumbnail = this.getThumbnailForPlot(plot, this.entry.thumbnails);
188
+ if (thumbnail) {
189
+ thumbnailURL = this.getImageURLFromS3(this.envVars.API_LOCATION, {
190
+ id,
191
+ datasetId: this.datasetId,
192
+ datasetVersion: this.datasetVersion,
193
+ file_path: thumbnail.dataset.path,
194
+ s3Bucket: this.s3Bucket,
195
+ });
196
+ mimetype = thumbnail.mimetype.name;
197
+ }
198
+
199
+ filePathPrefix = `${this.envVars.API_LOCATION}/s3-resource/${this.datasetId}/${this.datasetVersion}/files/`;
200
+ sourceUrl = filePathPrefix + plot.dataset.path + this.getS3Args();
201
+ metadata = JSON.parse(
202
+ plotAnnotation.supplemental_json_metadata.description
203
+ );
204
+ } else {
205
+ thumbnailURL = this.datasetThumbnail;
206
+ mimetype = plot.additional_mimetype.name;
207
+ sourceUrl = this.entry.source_url_prefix + plot.dataset.path;
208
+ metadata = plotAnnotation.supplemental_json_metadata.description;
209
+ if (metadata !== "") {
210
+ metadata = JSON.parse(
211
+ plotAnnotation.supplemental_json_metadata.description.replaceAll("'", '"'));
212
+ }
213
+ filePathPrefix = this.entry.source_url_prefix;
214
+ }
187
215
 
188
- let supplementalData = [];
189
216
  if (plotAnnotation.isDescribedBy) {
190
217
  supplementalData.push({
191
218
  url: filePathPrefix + plotAnnotation.isDescribedBy.path
@@ -204,7 +231,7 @@ export default {
204
231
  s3uri: this.entry.s3uri,
205
232
  title: "View plot",
206
233
  type: "Plot",
207
- discoverId: this.discoverId,
234
+ discoverId: this.datasetId,
208
235
  version: this.datasetVersion,
209
236
  };
210
237
  this.items['Plots'].push({
@@ -267,6 +294,37 @@ export default {
267
294
  });
268
295
  }
269
296
  },
297
+ createScaffoldViewItems: function() {
298
+ if (this.entry.scaffoldViews) {
299
+ // let index = 0;
300
+ this.entry.scaffoldViews.forEach((scaffold) => {
301
+ const filePath = scaffold.dataset.path;
302
+ const id = scaffold.identifier;
303
+ let thumbnailURL = scaffold.image_url;
304
+ let action = {
305
+ label: capitalise(this.label),
306
+ resource:
307
+ this.entry.source_url_prefix + scaffold.datacite.isDerivedFrom.path,
308
+ viewUrl: this.entry.source_url_prefix + scaffold.dataset.path,
309
+ title: "View 3D scaffold",
310
+ type: "Scaffold",
311
+ discoverId: this.datasetId,
312
+ apiLocation: this.envVars.API_LOCATION,
313
+ version: this.datasetVersion,
314
+ banner: this.datasetThumbnail,
315
+ // contextCardUrl: this.getContextCardUrl(i),
316
+ };
317
+ this.items["Scaffolds"].push({
318
+ id,
319
+ title: baseName(filePath),
320
+ type: "Scaffold",
321
+ thumbnail: thumbnailURL,
322
+ userData: action,
323
+ hideType: true,
324
+ });
325
+ });
326
+ }
327
+ },
270
328
  createSegmentationItems: function () {
271
329
  if (this.entry.segmentation) {
272
330
  this.entry.segmentation.forEach((segmentation) => {
@@ -363,8 +421,8 @@ export default {
363
421
  let contextIndex = this.entry['abi-contextual-information'].length == this.entry.scaffolds.length ? scaffoldIndex : 0
364
422
  return `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${this.entry.contextualInformation[contextIndex]}${this.getS3Args()}`
365
423
  }
366
- }
367
- },
424
+ },
425
+ },
368
426
  computed: {
369
427
  galleryItems() {
370
428
  if (this.resetIndex) {
@@ -92,6 +92,8 @@ const convertReadableLabel = function (original) {
92
92
  }
93
93
  };
94
94
 
95
+
96
+
95
97
  export default {
96
98
  name: "SearchFilters",
97
99
  components: {
@@ -110,6 +112,11 @@ export default {
110
112
  default: ()=>{}
111
113
  },
112
114
  },
115
+ inject: {
116
+ 'alternateSearch' : {
117
+ default: undefined,
118
+ },
119
+ },
113
120
  data: function () {
114
121
  return {
115
122
  cascaderIsReady: false,
@@ -125,7 +132,6 @@ export default {
125
132
  cascadeSelectedWithBoolean: [],
126
133
  numberShown: 10,
127
134
  filters: [],
128
- facets: ["Species", "Gender", "Organ", "Datasets"],
129
135
  numberDatasetsShown: ["10", "20", "50"],
130
136
  props: { multiple: true },
131
137
  options: [
@@ -147,43 +153,64 @@ export default {
147
153
  if (facet) return term + ">" + facet;
148
154
  else return term;
149
155
  },
150
- populateCascader: function () {
156
+ populateCascaderOptions: function(data) {
157
+ this.options = data;
158
+ // create top level of options in cascader
159
+ this.options.forEach((facet, i) => {
160
+ this.options[i].label = convertReadableLabel(facet.label);
161
+ this.options[i].value = this.createCascaderItemValue(
162
+ facet.key,
163
+ undefined
164
+ );
165
+
166
+ // put "Show all" as first option
167
+ this.options[i].children.unshift({
168
+ value: this.createCascaderItemValue("Show all"),
169
+ label: "Show all",
170
+ });
171
+
172
+ // populate second level of options
173
+ this.options[i].children.forEach((facetItem, j) => {
174
+ this.options[i].children[j].label = convertReadableLabel(
175
+ facetItem.label
176
+ );
177
+ this.options[i].children[j].value =
178
+ this.createCascaderItemValue(facet.label, facetItem.label);
179
+ });
180
+ });
181
+ },
182
+ populateDefaultCascader: function() {
151
183
  return new Promise((resolve) => {
152
184
  // Algolia facet serach
153
185
  this.algoliaClient.getAlgoliaFacets(facetPropPathMapping)
154
186
  .then((data) => {
155
- this.facets = data;
156
- this.options = data;
157
-
158
- // create top level of options in cascader
159
- this.options.forEach((facet, i) => {
160
- this.options[i].label = convertReadableLabel(facet.label);
161
- this.options[i].value = this.createCascaderItemValue(
162
- facet.key,
163
- undefined
164
- );
165
-
166
- // put "Show all" as first option
167
- this.options[i].children.unshift({
168
- value: this.createCascaderItemValue("Show all"),
169
- label: "Show all",
170
- });
171
-
172
- // populate second level of options
173
- this.options[i].children.forEach((facetItem, j) => {
174
- this.options[i].children[j].label = convertReadableLabel(
175
- facetItem.label
176
- );
177
- this.options[i].children[j].value =
178
- this.createCascaderItemValue(facet.label, facetItem.label);
179
- });
180
- });
187
+ this.populateCascaderOptions(data);
181
188
  })
182
189
  .finally(() => {
183
190
  resolve();
184
191
  });
185
192
  });
186
193
  },
194
+ setCascaderReady:function() {
195
+ this.cascaderIsReady = true;
196
+ this.checkShowAllBoxes();
197
+ this.setCascader(this.entry.filterFacets);
198
+ this.makeCascadeLabelsClickable();
199
+ this.$emit("cascaderReady");
200
+ },
201
+ alternateSearchCB: function(payload) {
202
+ this.populateCascaderOptions(payload.data);
203
+ this.setCascaderReady();
204
+ },
205
+ populateCascader: function () {
206
+ if (this.alternateSearch) {
207
+ this.alternateSearch({requestType: 'getFacets'}, this.alternateSearchCB);
208
+ } else {
209
+ this.populateDefaultCascader().then(() => {
210
+ this.setCascaderReady();
211
+ });
212
+ }
213
+ },
187
214
  tagsChangedCallback: function (presentTags) {
188
215
  if (presentTags.length > 0) {
189
216
  this.showFiltersText = false;
@@ -216,7 +243,6 @@ export default {
216
243
  }
217
244
  })
218
245
 
219
-
220
246
  this.$emit('loading', true) // let sidebarcontent wait for the requests
221
247
 
222
248
  this.$emit("filterResults", filters); // emit filters for apps above sidebar
@@ -417,15 +443,11 @@ export default {
417
443
  },
418
444
  },
419
445
  mounted: function () {
420
- this.algoliaClient = new AlgoliaClient(this.envVars.ALGOLIA_ID, this.envVars.ALGOLIA_KEY, this.envVars.PENNSIEVE_API_LOCATION);
421
- this.algoliaClient.initIndex(this.envVars.ALGOLIA_INDEX);
422
- this.populateCascader().then(() => {
423
- this.cascaderIsReady = true;
424
- this.checkShowAllBoxes();
425
- this.setCascader(this.entry.filterFacets);
426
- this.makeCascadeLabelsClickable();
427
- this.$emit("cascaderReady");
428
- });
446
+ if (!this.alternateSearch) {
447
+ this.algoliaClient = new AlgoliaClient(this.envVars.ALGOLIA_ID, this.envVars.ALGOLIA_KEY, this.envVars.PENNSIEVE_API_LOCATION);
448
+ this.algoliaClient.initIndex(this.envVars.ALGOLIA_INDEX);
449
+ }
450
+ this.populateCascader();
429
451
  },
430
452
  };
431
453
  </script>
@@ -445,7 +467,6 @@ export default {
445
467
  width: 24px !important;
446
468
  height: 24px;
447
469
  transform: scale(1.1);
448
- color: #8300bf;
449
470
  cursor: pointer;
450
471
  }
451
472
 
@@ -75,6 +75,10 @@ export default {
75
75
  openAtStart: {
76
76
  type: Boolean,
77
77
  default: false
78
+ },
79
+ alternateSearch: {
80
+ type: Function,
81
+ default: undefined
78
82
  }
79
83
  },
80
84
  data: function () {
@@ -82,6 +86,11 @@ export default {
82
86
  drawerOpen: false,
83
87
  }
84
88
  },
89
+ provide: function() {
90
+ return {
91
+ alternateSearch: this.alternateSearch
92
+ }
93
+ },
85
94
  methods: {
86
95
  searchChanged: function (id, data) {
87
96
  this.$emit("search-changed", {...data, id: id});