@internetarchive/collection-browser 1.14.17-alpha.3 → 1.14.17-alpha.30

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 (69) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/src/collection-browser.d.ts +6 -13
  4. package/dist/src/collection-browser.js +54 -25
  5. package/dist/src/collection-browser.js.map +1 -1
  6. package/dist/src/data-source/collection-browser-data-source.d.ts +48 -30
  7. package/dist/src/data-source/collection-browser-data-source.js +106 -116
  8. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  9. package/dist/src/data-source/models.d.ts +7 -3
  10. package/dist/src/data-source/models.js.map +1 -1
  11. package/dist/src/manage/manage-bar.d.ts +1 -1
  12. package/dist/src/manage/manage-bar.js.map +1 -1
  13. package/dist/src/models.d.ts +20 -4
  14. package/dist/src/models.js +105 -0
  15. package/dist/src/models.js.map +1 -1
  16. package/dist/src/sort-filter-bar/sort-filter-bar.js +1 -0
  17. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  18. package/dist/src/tiles/grid/item-tile.d.ts +1 -0
  19. package/dist/src/tiles/grid/item-tile.js +28 -1
  20. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  21. package/dist/src/tiles/grid/tile-stats.js +13 -8
  22. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  23. package/dist/src/tiles/list/tile-list.d.ts +1 -0
  24. package/dist/src/tiles/list/tile-list.js +32 -1
  25. package/dist/src/tiles/list/tile-list.js.map +1 -1
  26. package/dist/src/tiles/tile-dispatcher.js +3 -2
  27. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  28. package/dist/src/tiles/tile-display-value-provider.d.ts +6 -2
  29. package/dist/src/tiles/tile-display-value-provider.js +15 -1
  30. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  31. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -0
  32. package/dist/src/utils/collapse-repeated-quotes.js +14 -0
  33. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -0
  34. package/dist/src/utils/resolve-mediatype.d.ts +8 -0
  35. package/dist/src/utils/resolve-mediatype.js +24 -0
  36. package/dist/src/utils/resolve-mediatype.js.map +1 -0
  37. package/dist/test/collection-browser.test.js +37 -25
  38. package/dist/test/collection-browser.test.js.map +1 -1
  39. package/dist/test/collection-facets/more-facets-content.test.js +2 -2
  40. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  41. package/dist/test/item-image.test.js +33 -34
  42. package/dist/test/item-image.test.js.map +1 -1
  43. package/dist/test/mocks/mock-search-responses.d.ts +1 -0
  44. package/dist/test/mocks/mock-search-responses.js +62 -0
  45. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  46. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +41 -4
  47. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  48. package/dist/test/tiles/hover/hover-pane-controller.test.js +18 -17
  49. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/collection-browser.ts +62 -42
  52. package/src/data-source/collection-browser-data-source.ts +170 -140
  53. package/src/data-source/models.ts +7 -2
  54. package/src/manage/manage-bar.ts +1 -1
  55. package/src/models.ts +154 -3
  56. package/src/sort-filter-bar/sort-filter-bar.ts +1 -0
  57. package/src/tiles/grid/item-tile.ts +36 -1
  58. package/src/tiles/grid/tile-stats.ts +12 -7
  59. package/src/tiles/list/tile-list.ts +43 -5
  60. package/src/tiles/tile-dispatcher.ts +2 -1
  61. package/src/tiles/tile-display-value-provider.ts +20 -2
  62. package/src/utils/collapse-repeated-quotes.ts +13 -0
  63. package/src/utils/resolve-mediatype.ts +26 -0
  64. package/test/collection-browser.test.ts +72 -27
  65. package/test/collection-facets/more-facets-content.test.ts +4 -2
  66. package/test/item-image.test.ts +34 -36
  67. package/test/mocks/mock-search-responses.ts +66 -0
  68. package/test/sort-filter-bar/sort-filter-bar.test.ts +50 -4
  69. package/test/tiles/hover/hover-pane-controller.test.ts +19 -17
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ export { CollectionBrowser } from './src/collection-browser';
2
2
  export { CollectionBrowserDataSource, } from './src/data-source/collection-browser-data-source';
3
3
  export {} from './src/data-source/models';
4
4
  export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';
5
- export { SortField } from './src/models';
5
+ export { SortField, TileModel } from './src/models';
6
6
  export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';
7
7
  export { CollectionTile } from './src/tiles/grid/collection-tile';
8
8
  export { AccountTile } from './src/tiles/grid/account-tile';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,2BAA2B,GAE5B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAA+B,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAyB,SAAS,EAAa,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC","sourcesContent":["export { CollectionBrowser } from './src/collection-browser';\nexport {\n CollectionBrowserDataSource,\n CollectionBrowserDataSourceInterface,\n} from './src/data-source/collection-browser-data-source';\nexport { CollectionBrowserQueryState } from './src/data-source/models';\nexport { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';\nexport { CollectionDisplayMode, SortField, TileModel } from './src/models';\nexport { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';\nexport { CollectionTile } from './src/tiles/grid/collection-tile';\nexport { AccountTile } from './src/tiles/grid/account-tile';\nexport { ItemTile } from './src/tiles/grid/item-tile';\nexport { TileList } from './src/tiles/list/tile-list';\nexport { TileListCompact } from './src/tiles/list/tile-list-compact';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,2BAA2B,GAE5B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAA+B,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAyB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC","sourcesContent":["export { CollectionBrowser } from './src/collection-browser';\nexport {\n CollectionBrowserDataSource,\n CollectionBrowserDataSourceInterface,\n} from './src/data-source/collection-browser-data-source';\nexport { CollectionBrowserQueryState } from './src/data-source/models';\nexport { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';\nexport { CollectionDisplayMode, SortField, TileModel } from './src/models';\nexport { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';\nexport { CollectionTile } from './src/tiles/grid/collection-tile';\nexport { AccountTile } from './src/tiles/grid/account-tile';\nexport { ItemTile } from './src/tiles/grid/item-tile';\nexport { TileList } from './src/tiles/list/tile-list';\nexport { TileListCompact } from './src/tiles/list/tile-list-compact';\n"]}
@@ -1,6 +1,6 @@
1
1
  import { LitElement, PropertyValues, TemplateResult } from 'lit';
2
2
  import type { InfiniteScrollerCellProviderInterface } from '@internetarchive/infinite-scroller';
3
- import { CollectionExtraInfo, SearchServiceInterface, SearchType, SortDirection, SortParam } from '@internetarchive/search-service';
3
+ import { CollectionExtraInfo, PageElementName, SearchServiceInterface, SearchType, SortDirection, SortParam } from '@internetarchive/search-service';
4
4
  import type { SharedResizeObserverInterface, SharedResizeObserverResizeHandlerInterface } from '@internetarchive/shared-resize-observer';
5
5
  import '@internetarchive/infinite-scroller';
6
6
  import type { ModalManagerInterface } from '@internetarchive/modal-manager';
@@ -15,7 +15,7 @@ import './circular-activity-indicator';
15
15
  import { SelectedFacets, SortField, CollectionBrowserContext, TileModel, CollectionDisplayMode, FacetEventDetails } from './models';
16
16
  import { RestorationStateHandlerInterface } from './restoration-state-handler';
17
17
  import { CollectionBrowserDataSourceInterface } from './data-source/collection-browser-data-source';
18
- import type { CollectionBrowserSearchInterface } from './data-source/models';
18
+ import type { CollectionBrowserQueryState, CollectionBrowserSearchInterface } from './data-source/models';
19
19
  import './empty-placeholder';
20
20
  export declare class CollectionBrowser extends LitElement implements InfiniteScrollerCellProviderInterface, SharedResizeObserverResizeHandlerInterface, CollectionBrowserSearchInterface {
21
21
  baseNavigationUrl?: string;
@@ -24,7 +24,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
24
24
  searchType: SearchType;
25
25
  withinCollection?: string;
26
26
  withinProfile?: string;
27
- profileElement?: string;
27
+ profileElement?: PageElementName;
28
28
  baseQuery?: string;
29
29
  displayMode?: CollectionDisplayMode;
30
30
  defaultSortParam: SortParam | null;
@@ -42,6 +42,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
42
42
  suppressResultCount: boolean;
43
43
  suppressURLQuery: boolean;
44
44
  suppressFacets: boolean;
45
+ suppressSortBar: boolean;
45
46
  clearResultsOnEmptyQuery: boolean;
46
47
  collectionPagePath: string;
47
48
  /** describes where this component is being used */
@@ -277,6 +278,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
277
278
  * Emits an event indicating a change in whether the manage mode is shown.
278
279
  */
279
280
  private emitManageModeChangedEvent;
281
+ installDataSourceAndQueryState(dataSource: CollectionBrowserDataSourceInterface, queryState: CollectionBrowserQueryState): Promise<void>;
280
282
  firstUpdated(): void;
281
283
  updated(changed: PropertyValues): void;
282
284
  disconnectedCallback(): void;
@@ -304,7 +306,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
304
306
  private updateFacetFadeOut;
305
307
  private emitBaseQueryChanged;
306
308
  private emitSearchTypeChanged;
307
- private emitQueryStateChanged;
309
+ emitQueryStateChanged(): void;
308
310
  emitEmptyResults(): void;
309
311
  private disconnectResizeObserver;
310
312
  private setupResizeObserver;
@@ -319,15 +321,6 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
319
321
  private initialQueryChangeHappened;
320
322
  private historyPopOccurred;
321
323
  private previousQueryKey?;
322
- /**
323
- * Internal property to store the `resolve` function for the most recent
324
- * `initialSearchComplete` promise, allowing us to resolve it at the appropriate time.
325
- */
326
- private _initialSearchCompleteResolver;
327
- /**
328
- * Internal property to store the private value backing the `initialSearchComplete` getter.
329
- */
330
- private _initialSearchCompletePromise;
331
324
  /**
332
325
  * A Promise which, after each query change, resolves once the fetches for the initial
333
326
  * search have completed. Waits for *both* the hits and aggregations fetches to finish.
@@ -37,6 +37,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
37
37
  this.suppressResultCount = false;
38
38
  this.suppressURLQuery = false;
39
39
  this.suppressFacets = false;
40
+ this.suppressSortBar = false;
40
41
  this.clearResultsOnEmptyQuery = false;
41
42
  this.collectionPagePath = '/details/';
42
43
  /** describes where this component is being used */
@@ -126,16 +127,9 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
126
127
  // so this keeps track of whether we've already set the initial query
127
128
  this.initialQueryChangeHappened = false;
128
129
  this.historyPopOccurred = false;
129
- /**
130
- * Internal property to store the private value backing the `initialSearchComplete` getter.
131
- */
132
- this._initialSearchCompletePromise = new Promise(res => {
133
- this._initialSearchCompleteResolver = res;
134
- });
135
130
  }
136
131
  tileModelAtCellIndex(index) {
137
- const offsetIndex = index + this.tileModelOffset;
138
- const model = this.dataSource.getTileModelAt(offsetIndex);
132
+ const model = this.dataSource.getTileModelAt(index);
139
133
  /**
140
134
  * If we encounter a model we don't have yet and we're not in the middle of an
141
135
  * automated scroll, fetch the page and just return undefined.
@@ -144,8 +138,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
144
138
  * We disable it during the automated scroll since we don't want to fetch pages for intervening cells the
145
139
  * user may never see.
146
140
  */
147
- if (!model && !this.isScrollingToCell) {
148
- const pageNumber = Math.floor(offsetIndex / this.pageSize) + 1;
141
+ if (!model && !this.isScrollingToCell && this.dataSource.queryInitialized) {
142
+ const pageNumber = Math.floor(index / this.pageSize) + 1;
149
143
  this.dataSource.fetchPage(pageNumber);
150
144
  }
151
145
  return model;
@@ -196,12 +190,14 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
196
190
  * Sets the state for whether the initial set of search results is loading in.
197
191
  */
198
192
  setSearchResultsLoading(loading) {
193
+ console.log('setting search results loading to', loading);
199
194
  this.searchResultsLoading = loading;
200
195
  }
201
196
  /**
202
197
  * Sets the state for whether facet data is loading in
203
198
  */
204
199
  setFacetsLoading(loading) {
200
+ console.log('setting facets loading to', loading);
205
201
  this.facetsLoading = loading;
206
202
  }
207
203
  /**
@@ -446,6 +442,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
446
442
  }
447
443
  get sortFilterBarTemplate() {
448
444
  var _a;
445
+ if (this.suppressSortBar)
446
+ return nothing;
449
447
  return html `
450
448
  <sort-filter-bar
451
449
  .defaultSortField=${this.defaultSortField}
@@ -497,10 +495,11 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
497
495
  handleRemoveItems() {
498
496
  this.dispatchEvent(new CustomEvent('itemRemovalRequested', {
499
497
  detail: {
500
- items: this.dataSource.checkedTileModels.map(model => ({
501
- ...model,
502
- date: formatDate(model.datePublished, 'long'),
503
- })),
498
+ items: this.dataSource.checkedTileModels.map(model => {
499
+ const cloned = model.clone();
500
+ cloned.dateStr = formatDate(model.datePublished, 'long');
501
+ return cloned;
502
+ }),
504
503
  },
505
504
  }));
506
505
  }
@@ -772,12 +771,39 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
772
771
  detail: this.isManageView,
773
772
  }));
774
773
  }
774
+ async installDataSourceAndQueryState(dataSource, queryState) {
775
+ var _a;
776
+ console.log('installing in CB:', dataSource, queryState);
777
+ if (this.dataSource)
778
+ this.removeController(this.dataSource);
779
+ this.dataSource = dataSource;
780
+ this.addController(this.dataSource);
781
+ this.baseQuery = queryState.baseQuery;
782
+ this.profileElement = queryState.profileElement;
783
+ this.searchType = queryState.searchType;
784
+ this.selectedFacets = queryState.selectedFacets;
785
+ this.minSelectedDate = queryState.minSelectedDate;
786
+ this.maxSelectedDate = queryState.maxSelectedDate;
787
+ this.selectedSort =
788
+ (_a = queryState.selectedSort) !== null && _a !== void 0 ? _a : SortField.default;
789
+ this.sortDirection = queryState.sortDirection;
790
+ this.selectedTitleFilter = queryState.selectedTitleFilter;
791
+ this.selectedCreatorFilter =
792
+ queryState.selectedCreatorFilter;
793
+ this.requestUpdate();
794
+ await this.updateComplete;
795
+ if (!this.searchResultsLoading) {
796
+ this.setTileCount(this.dataSource.size);
797
+ this.refreshVisibleResults();
798
+ }
799
+ }
775
800
  firstUpdated() {
776
801
  this.setupStateRestorationObserver();
777
802
  this.restoreState();
778
803
  }
779
804
  updated(changed) {
780
805
  var _a, _b;
806
+ console.log('* CB UPDATED', [...changed.entries()].map(([k, v]) => `${String(k)}: ${v} => ${this[k]}`).join('\n'));
781
807
  if (changed.has('placeholderType') && this.placeholderType === null) {
782
808
  if (!this.leftColIntersectionObserver) {
783
809
  this.setupLeftColumnScrollListeners();
@@ -959,6 +985,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
959
985
  }));
960
986
  }
961
987
  emitQueryStateChanged() {
988
+ console.log('emitting query state changed event');
962
989
  this.dispatchEvent(new CustomEvent('queryStateChanged', {
963
990
  detail: {
964
991
  baseQuery: this.baseQuery,
@@ -1026,11 +1053,16 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1026
1053
  * one, to ensure you do not await an obsolete promise from the previous update.
1027
1054
  */
1028
1055
  get initialSearchComplete() {
1029
- return this._initialSearchCompletePromise;
1056
+ return this.dataSource.initialSearchComplete;
1030
1057
  }
1031
1058
  async handleQueryChange() {
1032
1059
  var _a;
1033
- console.log('CB: handling query change', this.previousQueryKey, this.dataSource.pageFetchQueryKey, this.dataSource.canPerformSearch);
1060
+ // console.log(
1061
+ // 'CB: handling query change',
1062
+ // this.previousQueryKey,
1063
+ // this.dataSource.pageFetchQueryKey,
1064
+ // this.dataSource.canPerformSearch
1065
+ // );
1034
1066
  // only reset if the query has actually changed
1035
1067
  if (!this.searchService ||
1036
1068
  this.dataSource.pageFetchQueryKey === this.previousQueryKey)
@@ -1069,14 +1101,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1069
1101
  this.persistState();
1070
1102
  }
1071
1103
  this.historyPopOccurred = false;
1072
- // Reset the `initialSearchComplete` promise with a new value for the imminent search
1073
- this._initialSearchCompletePromise = new Promise(res => {
1074
- this._initialSearchCompleteResolver = res;
1075
- });
1076
1104
  // Fire the initial page and facets requests
1077
- await this.dataSource.handleQueryChange();
1078
- // Resolve the `initialSearchComplete` promise for this search
1079
- this._initialSearchCompleteResolver(true);
1105
+ // await this.dataSource.handleQueryChange();
1080
1106
  }
1081
1107
  setupStateRestorationObserver() {
1082
1108
  if (this.boundNavigationHandler)
@@ -1301,7 +1327,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1301
1327
  // this.mapDataSource(model => ({ ...model }));
1302
1328
  const cellIndex = this.dataSource.indexOf(event.detail);
1303
1329
  if (cellIndex >= 0)
1304
- (_a = this.infiniteScroller) === null || _a === void 0 ? void 0 : _a.refreshCell(cellIndex - this.tileModelOffset);
1330
+ (_a = this.infiniteScroller) === null || _a === void 0 ? void 0 : _a.refreshCell(cellIndex);
1305
1331
  }
1306
1332
  (_b = this.analyticsHandler) === null || _b === void 0 ? void 0 : _b.sendEvent({
1307
1333
  category: this.searchContext,
@@ -1344,7 +1370,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1344
1370
  * increase the number of pages to render and start fetching data for the new page
1345
1371
  */
1346
1372
  scrollThresholdReached() {
1347
- if (!this.dataSource.endOfDataReached) {
1373
+ if (!this.dataSource.endOfDataReached && this.dataSource.queryInitialized) {
1348
1374
  this.pagesToRender += 1;
1349
1375
  this.dataSource.fetchPage(this.pagesToRender);
1350
1376
  }
@@ -1802,6 +1828,9 @@ __decorate([
1802
1828
  __decorate([
1803
1829
  property({ type: Boolean })
1804
1830
  ], CollectionBrowser.prototype, "suppressFacets", void 0);
1831
+ __decorate([
1832
+ property({ type: Boolean })
1833
+ ], CollectionBrowser.prototype, "suppressSortBar", void 0);
1805
1834
  __decorate([
1806
1835
  property({ type: Boolean })
1807
1836
  ], CollectionBrowser.prototype, "clearResultsOnEmptyQuery", void 0);