@nanoporetech-digital/components 5.9.6 → 5.10.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.
Files changed (87) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/index-1d3ebe1a.js +0 -4
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/nano-algolia.cjs.entry.js +13 -1
  5. package/dist/cjs/nano-algolia.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-components.cjs.js +1 -1
  7. package/dist/cjs/nano-global-nav.cjs.entry.js +85 -48
  8. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-global-search-results.cjs.entry.js +6 -7
  10. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  11. package/dist/cjs/{nano-table-49b4b3a6.js → nano-table-72d5dc63.js} +2 -2
  12. package/dist/cjs/{nano-table-49b4b3a6.js.map → nano-table-72d5dc63.js.map} +1 -1
  13. package/dist/cjs/nano-table.cjs.entry.js +1 -1
  14. package/dist/cjs/{table.worker-da980a2f.js → table.worker-3df34efe.js} +2 -2
  15. package/dist/cjs/table.worker-3df34efe.js.map +1 -0
  16. package/dist/collection/collection-manifest.json +0 -1
  17. package/dist/collection/components/algolia/algolia-interface.js.map +1 -1
  18. package/dist/collection/components/algolia/algolia.js +17 -5
  19. package/dist/collection/components/algolia/algolia.js.map +1 -1
  20. package/dist/collection/components/global-nav/global-nav.js +85 -48
  21. package/dist/collection/components/global-nav/global-nav.js.map +1 -1
  22. package/dist/collection/components/global-search-results/global-search-results.js +6 -7
  23. package/dist/collection/components/global-search-results/global-search-results.js.map +1 -1
  24. package/dist/components/algolia.js +13 -2
  25. package/dist/components/algolia.js.map +1 -1
  26. package/dist/components/index.d.ts +0 -1
  27. package/dist/components/index.js +0 -1
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/components/nano-global-nav.js +85 -48
  30. package/dist/components/nano-global-nav.js.map +1 -1
  31. package/dist/components/nano-global-search-results.js +6 -7
  32. package/dist/components/nano-global-search-results.js.map +1 -1
  33. package/dist/esm/index-06666022.js +0 -4
  34. package/dist/esm/loader.js +1 -1
  35. package/dist/esm/nano-algolia.entry.js +13 -1
  36. package/dist/esm/nano-algolia.entry.js.map +1 -1
  37. package/dist/esm/nano-components.js +1 -1
  38. package/dist/esm/nano-global-nav.entry.js +85 -48
  39. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  40. package/dist/esm/nano-global-search-results.entry.js +6 -7
  41. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  42. package/dist/esm/{nano-table-673838b5.js → nano-table-5af42ba4.js} +2 -2
  43. package/dist/esm/{nano-table-673838b5.js.map → nano-table-5af42ba4.js.map} +1 -1
  44. package/dist/esm/nano-table.entry.js +1 -1
  45. package/dist/esm/{table.worker-608a4868.js → table.worker-3cae908c.js} +2 -2
  46. package/dist/esm/table.worker-3cae908c.js.map +1 -0
  47. package/dist/nano-components/nano-components.esm.js +1 -1
  48. package/dist/nano-components/nano-components.esm.js.map +1 -1
  49. package/dist/nano-components/{p-06c85b64.js → p-1987f7a9.js} +2 -2
  50. package/dist/nano-components/{p-24dcd788.entry.js → p-2c0218e6.entry.js} +2 -2
  51. package/dist/nano-components/p-2c0218e6.entry.js.map +1 -0
  52. package/dist/nano-components/p-abd11243.entry.js +5 -0
  53. package/dist/nano-components/p-abd11243.entry.js.map +1 -0
  54. package/dist/nano-components/{p-d18c0a7a.js → p-dc4020f8.js} +2 -2
  55. package/dist/nano-components/p-dc6cb252.entry.js +5 -0
  56. package/dist/nano-components/p-dc6cb252.entry.js.map +1 -0
  57. package/dist/nano-components/{p-0b7c676c.entry.js → p-fbde7010.entry.js} +2 -2
  58. package/dist/types/components/algolia/algolia-interface.d.ts +8 -2
  59. package/dist/types/components/algolia/algolia.d.ts +3 -4
  60. package/dist/types/components/global-nav/global-nav.d.ts +32 -0
  61. package/dist/types/components.d.ts +2 -127
  62. package/docs-json.json +5 -257
  63. package/docs-vscode.json +2 -63
  64. package/hydrate/index.js +107 -242
  65. package/package.json +2 -2
  66. package/dist/cjs/nano-algolia-input.cjs.entry.js +0 -168
  67. package/dist/cjs/nano-algolia-input.cjs.entry.js.map +0 -1
  68. package/dist/cjs/table.worker-da980a2f.js.map +0 -1
  69. package/dist/collection/components/algolia/algolia-input.js +0 -463
  70. package/dist/collection/components/algolia/algolia-input.js.map +0 -1
  71. package/dist/components/nano-algolia-input.d.ts +0 -11
  72. package/dist/components/nano-algolia-input.js +0 -195
  73. package/dist/components/nano-algolia-input.js.map +0 -1
  74. package/dist/esm/nano-algolia-input.entry.js +0 -164
  75. package/dist/esm/nano-algolia-input.entry.js.map +0 -1
  76. package/dist/esm/table.worker-608a4868.js.map +0 -1
  77. package/dist/nano-components/p-02b727d3.entry.js +0 -5
  78. package/dist/nano-components/p-02b727d3.entry.js.map +0 -1
  79. package/dist/nano-components/p-24dcd788.entry.js.map +0 -1
  80. package/dist/nano-components/p-7dd30a3f.entry.js +0 -7
  81. package/dist/nano-components/p-7dd30a3f.entry.js.map +0 -1
  82. package/dist/nano-components/p-842f826a.entry.js +0 -5
  83. package/dist/nano-components/p-842f826a.entry.js.map +0 -1
  84. package/dist/types/components/algolia/algolia-input.d.ts +0 -103
  85. /package/dist/nano-components/{p-06c85b64.js.map → p-1987f7a9.js.map} +0 -0
  86. /package/dist/nano-components/{p-d18c0a7a.js.map → p-dc4020f8.js.map} +0 -0
  87. /package/dist/nano-components/{p-0b7c676c.entry.js.map → p-fbde7010.entry.js.map} +0 -0
@@ -222,6 +222,11 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
222
222
  this.searchLoading = true;
223
223
  }
224
224
  };
225
+ /**
226
+ * Called whenever the search input value changes.
227
+ * Performs Algolia search and shows autocomplete results.
228
+ * @param ev optional input change event
229
+ */
225
230
  this.onSearchChange = async (ev) => {
226
231
  this.searchValInternal = this.searchValue = ev
227
232
  ? ev.detail.value
@@ -237,64 +242,43 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
237
242
  }
238
243
  if (!this.currentIndex)
239
244
  this.currentSelectedIndex();
240
- try {
241
- this.autocompleteResults = this.processSearchResults((await this.currentIndex.alogliaIndex.search(this.searchValInternal, {
242
- attributesToSnippet: ['body:5', 'title:8'],
243
- hitsPerPage: 5,
244
- filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years
245
- })));
246
- }
247
- catch (e) {
248
- console.error(e);
249
- }
245
+ // start search
246
+ this.searchLoading = true;
247
+ const algoliaHits = await this.doAlgoliaSearch();
250
248
  this.scopeSearch = null;
251
- this.scopeSearch = await this.onSearchSubmit(null, false);
252
- this.searchLoading = false;
249
+ this.scopeSearch = algoliaHits;
250
+ // set / show autocomplete results
251
+ this.autocompleteResults = algoliaHits.results.find((res) => res.selected);
253
252
  this.showAutocompleteResults();
253
+ this.searchLoading = false;
254
254
  };
255
- this.onSearchSubmit = async (ev, emit = true) => {
255
+ /**
256
+ * Called whenever the search form is submitted (but can also be called manually).
257
+ * Fires event which will activate / display `nano-global-search-results`
258
+ * @param ev optional form submit event
259
+ */
260
+ this.onSearchSubmit = async (ev) => {
256
261
  if (ev)
257
262
  ev.preventDefault();
258
263
  if (!this.isSearchValSet())
259
264
  return;
260
- this.searchLoading = true;
261
- this.algoliaSearchResults = null;
262
265
  if (!this.currentIndex)
263
266
  this.currentSelectedIndex();
264
- const queries = this.internalSearchIndeces.map((index) => {
265
- return {
266
- indexName: index.index,
267
- query: this.searchValInternal,
268
- facets: index.filters,
269
- hitsPerPage: 10,
270
- filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years
271
- };
272
- });
273
- try {
274
- this.algoliaSearchResults = this.processSearchResults((await this.algoliaClient.search(queries)));
275
- }
276
- catch (e) {
277
- this.nanoSearchError.emit(e);
278
- }
279
- this.searchLoading = false;
280
267
  if (!this.algoliaSearchResults)
281
- return;
282
- this.algoliaSearchResults.results.map((result, i) => {
283
- result.indexName = this.internalSearchIndeces[i].name;
284
- result.selected =
285
- this.currentIndex.name === this.internalSearchIndeces[i].name;
286
- result.domain = this.currentIndex.domain || null;
287
- result.domains = this.myAccData.domains || null;
288
- result.allGroup = !!this.internalSearchIndeces[i].allGroup;
289
- result.filters = this.internalSearchIndeces[i].filters;
268
+ await this.doAlgoliaSearch();
269
+ const activeIndex = this.algoliaSearchResults.results.find((res) => res.selected);
270
+ const { index, domain, filters, query } = activeIndex;
271
+ this.nanoSearchResult.emit({
272
+ meta: {
273
+ indexTitle: activeIndex.indexName,
274
+ index,
275
+ domain,
276
+ filters,
277
+ query,
278
+ },
279
+ client: { apiKey: this.searchApiKey, appId: this.searchAppId },
290
280
  });
291
- if (emit) {
292
- this.nanoSearchResult.emit({
293
- results: this.algoliaSearchResults.results,
294
- client: { apiKey: this.searchApiKey, appId: this.searchAppId },
295
- });
296
- this.showAutocomplete = false;
297
- }
281
+ this.showAutocomplete = false;
298
282
  return this.algoliaSearchResults;
299
283
  };
300
284
  this.onSearchIndexChange = async (index) => {
@@ -787,6 +771,44 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
787
771
  }
788
772
  return hit.title;
789
773
  }
774
+ /**
775
+ * Constructs a multi-search query for all set search indices
776
+ * (which are normally controlled via the myAccount payload) then sends to Algolia.
777
+ * Post-processes results, adding correct domains to url fields.
778
+ * @returns formatted algolia results
779
+ */
780
+ async doAlgoliaSearch() {
781
+ this.algoliaSearchResults = null;
782
+ const queries = this.internalSearchIndeces.map((index) => {
783
+ return {
784
+ attributesToSnippet: ['body:5', 'title:8'],
785
+ indexName: index.index,
786
+ query: this.searchValInternal,
787
+ facets: index.filters,
788
+ hitsPerPage: 5,
789
+ filters: 'created > ' + Math.floor((Date.now() - 63115200000) / 1000), // only get last 2 years
790
+ };
791
+ });
792
+ try {
793
+ this.algoliaSearchResults = this.processSearchResults((await this.algoliaClient.search(queries)));
794
+ }
795
+ catch (e) {
796
+ this.nanoSearchError.emit(e);
797
+ }
798
+ this.searchLoading = false;
799
+ if (!this.algoliaSearchResults)
800
+ return;
801
+ this.algoliaSearchResults.results.map((result, i) => {
802
+ result.indexName = this.internalSearchIndeces[i].name;
803
+ result.selected =
804
+ this.currentIndex.name === this.internalSearchIndeces[i].name;
805
+ result.domain = this.currentIndex.domain || null;
806
+ result.domains = this.myAccData.domains || null;
807
+ result.allGroup = !!this.internalSearchIndeces[i].allGroup;
808
+ result.filters = this.internalSearchIndeces[i].filters;
809
+ });
810
+ return this.algoliaSearchResults;
811
+ }
790
812
  isSearchValSet() {
791
813
  if (this.searchValInternal.length < 3)
792
814
  return false;
@@ -908,7 +930,7 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
908
930
  'search-icon--show': !!this.searchValue && !this.searchLoading,
909
931
  }, slot: "end", onMouseDown: (e) => {
910
932
  this.searchValInternal = this.searchInput.value;
911
- this.onSearchSubmit(e, true);
933
+ this.onSearchSubmit(e);
912
934
  } }, h("nano-icon", { name: "light/search" })), h("span", { class: {
913
935
  'search-icon': true,
914
936
  'search-icon--loader': true,
@@ -1040,12 +1062,21 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1040
1062
  }, onClick: this.menuClose, onTouchEnd: this.menuClose }))), h("div", { class: "site-content" }, h("slot", null))));
1041
1063
  }
1042
1064
  // Data processing
1065
+ /**
1066
+ * Finds a correct domain (as defined by myAccount data) for a given origin
1067
+ * @returns a domain string for this origin
1068
+ */
1043
1069
  domainFor(origin) {
1044
1070
  if (!this.myAccData)
1045
1071
  return '';
1046
1072
  const domain = this.myAccData.domains.find((dm) => dm.origin === origin);
1047
1073
  return domain ? domain.domain : '';
1048
1074
  }
1075
+ /**
1076
+ * process a set, or multiple sets of algolia results
1077
+ * and applies correct domain names / http protocol to each result's url
1078
+ * @returns results where partial paths are turned to full urls
1079
+ */
1049
1080
  processSearchResults(results) {
1050
1081
  const multiResults = results;
1051
1082
  const singleResult = results;
@@ -1064,6 +1095,9 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1064
1095
  return singleResult;
1065
1096
  }
1066
1097
  }
1098
+ /**
1099
+ * Ingests the data blob from myAccount; turns prescient fields to internal state
1100
+ */
1067
1101
  processMyAccData() {
1068
1102
  if (!this.myAccData || !this.myAccData.search.indeces.length)
1069
1103
  return;
@@ -1086,6 +1120,9 @@ const GlobalNav = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
1086
1120
  if (this.myAccData.urls.messages && !this.msgUrl)
1087
1121
  this.msgUrl = this.myAccData.urls.messages;
1088
1122
  }
1123
+ /**
1124
+ * Ingests the data blob from myAccount links; applies prescient fields to internal state
1125
+ */
1089
1126
  processMyAccLinks() {
1090
1127
  if (!this.myAccData.links || !this.myAccData.links.length)
1091
1128
  return;