@internetarchive/collection-browser 3.3.3 → 3.3.4-alpha-webdev7761.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 (55) hide show
  1. package/dist/src/collection-browser.d.ts +10 -2
  2. package/dist/src/collection-browser.js +112 -10
  3. package/dist/src/collection-browser.js.map +1 -1
  4. package/dist/src/collection-facets/facet-row.js +141 -140
  5. package/dist/src/collection-facets/facet-row.js.map +1 -1
  6. package/dist/src/collection-facets/models.js.map +1 -1
  7. package/dist/src/collection-facets.js +12 -0
  8. package/dist/src/collection-facets.js.map +1 -1
  9. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +10 -1
  10. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
  11. package/dist/src/data-source/collection-browser-data-source.d.ts +19 -1
  12. package/dist/src/data-source/collection-browser-data-source.js +36 -18
  13. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  14. package/dist/src/data-source/collection-browser-query-state.d.ts +1 -2
  15. package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
  16. package/dist/src/data-source/models.d.ts +11 -0
  17. package/dist/src/data-source/models.js.map +1 -1
  18. package/dist/src/manage/manage-bar.js +77 -77
  19. package/dist/src/manage/manage-bar.js.map +1 -1
  20. package/dist/src/models.d.ts +2 -6
  21. package/dist/src/models.js +8 -12
  22. package/dist/src/models.js.map +1 -1
  23. package/dist/src/restoration-state-handler.d.ts +1 -2
  24. package/dist/src/restoration-state-handler.js +3 -9
  25. package/dist/src/restoration-state-handler.js.map +1 -1
  26. package/dist/src/tiles/grid/search-tile.js +42 -42
  27. package/dist/src/tiles/grid/search-tile.js.map +1 -1
  28. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +119 -119
  29. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
  30. package/dist/test/collection-browser.test.js +19 -9
  31. package/dist/test/collection-browser.test.js.map +1 -1
  32. package/dist/test/collection-facets/facet-row.test.js +23 -23
  33. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  34. package/dist/test/collection-facets.test.js +20 -20
  35. package/dist/test/collection-facets.test.js.map +1 -1
  36. package/dist/test/restoration-state-handler.test.js +5 -37
  37. package/dist/test/restoration-state-handler.test.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/collection-browser.ts +132 -7
  40. package/src/collection-facets/facet-row.ts +299 -296
  41. package/src/collection-facets/models.ts +10 -10
  42. package/src/collection-facets.ts +11 -0
  43. package/src/data-source/collection-browser-data-source-interface.ts +345 -333
  44. package/src/data-source/collection-browser-data-source.ts +59 -19
  45. package/src/data-source/collection-browser-query-state.ts +1 -7
  46. package/src/data-source/models.ts +13 -0
  47. package/src/manage/manage-bar.ts +247 -247
  48. package/src/models.ts +866 -870
  49. package/src/restoration-state-handler.ts +542 -544
  50. package/src/tiles/grid/search-tile.ts +90 -90
  51. package/src/tiles/grid/styles/tile-grid-shared-styles.ts +130 -130
  52. package/test/collection-browser.test.ts +21 -11
  53. package/test/collection-facets/facet-row.test.ts +375 -375
  54. package/test/collection-facets.test.ts +928 -928
  55. package/test/restoration-state-handler.test.ts +480 -510
@@ -7,7 +7,7 @@ import '@internetarchive/infinite-scroller';
7
7
  import type { ModalManagerInterface } from '@internetarchive/modal-manager';
8
8
  import type { FeatureFeedbackServiceInterface } from '@internetarchive/feature-feedback';
9
9
  import type { RecaptchaManagerInterface } from '@internetarchive/recaptcha-manager';
10
- import { SelectedFacets, SortField, CollectionBrowserContext, TileModel, CollectionDisplayMode, FacetEventDetails, FacetLoadStrategy, TvClipFilterType } from './models';
10
+ import { SelectedFacets, SortField, CollectionBrowserContext, TileModel, CollectionDisplayMode, FacetEventDetails, FacetLoadStrategy } from './models';
11
11
  import { RestorationStateHandlerInterface } from './restoration-state-handler';
12
12
  import type { CollectionBrowserQueryState, CollectionBrowserSearchInterface } from './data-source/collection-browser-query-state';
13
13
  import type { CollectionBrowserDataSourceInterface } from './data-source/collection-browser-data-source-interface';
@@ -59,7 +59,6 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
59
59
  selectedSort: SortField;
60
60
  selectedTitleFilter: string | null;
61
61
  selectedCreatorFilter: string | null;
62
- tvClipFilter: TvClipFilterType;
63
62
  sortDirection: SortDirection | null;
64
63
  defaultSortField: Exclude<SortField, SortField.default>;
65
64
  defaultSortDirection: SortDirection | null;
@@ -460,6 +459,15 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
460
459
  * including the collapsible container (with header) and the facets themselves.
461
460
  */
462
461
  private get mobileFacetsTemplate();
462
+ private selectedTVNetwork?;
463
+ private selectedTVShow?;
464
+ private tvNetworksDropdown?;
465
+ private tvShowsDropdown?;
466
+ private networksDropdownClicked;
467
+ private showsDropdownClicked;
468
+ private networksDropdownChanged;
469
+ private showsDropdownChanged;
470
+ private get tvDropdownFiltersTemplate();
463
471
  /**
464
472
  * The template for the facets component alone, without any surrounding wrappers.
465
473
  */
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { html, css, LitElement, nothing, } from 'lit';
3
3
  import { customElement, property, query, state } from 'lit/decorators.js';
4
+ import { map } from 'lit/directives/map.js';
4
5
  import { classMap } from 'lit/directives/class-map.js';
5
6
  import { msg } from '@lit/localize';
6
7
  import { SearchType, } from '@internetarchive/search-service';
@@ -22,6 +23,7 @@ import './manage/manage-bar';
22
23
  import './collection-facets';
23
24
  import './circular-activity-indicator';
24
25
  import './collection-facets/smart-facets/smart-facet-bar';
26
+ import { mergeSelectedFacets, updateSelectedFacetBucket, } from './utils/facet-utils';
25
27
  let CollectionBrowser = class CollectionBrowser extends LitElement {
26
28
  constructor() {
27
29
  super();
@@ -33,7 +35,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
33
35
  this.selectedSort = SortField.default;
34
36
  this.selectedTitleFilter = null;
35
37
  this.selectedCreatorFilter = null;
36
- this.tvClipFilter = 'all';
37
38
  this.sortDirection = null;
38
39
  this.defaultSortField = SortField.relevance;
39
40
  this.defaultSortDirection = null;
@@ -183,6 +184,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
183
184
  */
184
185
  this.dataSourceInstallInProgress = false;
185
186
  this.placeholderCellTemplate = html `<collection-browser-loading-tile></collection-browser-loading-tile>`;
187
+ this.selectedTVNetwork = undefined;
188
+ this.selectedTVShow = undefined;
186
189
  /**
187
190
  * Updates the height of the left column according to its position on the page.
188
191
  * Arrow function ensures proper `this` binding.
@@ -969,6 +972,89 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
969
972
  </details>
970
973
  `;
971
974
  }
975
+ async networksDropdownClicked() {
976
+ var _a, _b;
977
+ (_a = this.tvNetworksDropdown) === null || _a === void 0 ? void 0 : _a.classList.add('loading');
978
+ await this.dataSource.populateTVChannelMaps();
979
+ (_b = this.tvNetworksDropdown) === null || _b === void 0 ? void 0 : _b.classList.remove('loading');
980
+ }
981
+ async showsDropdownClicked() {
982
+ var _a, _b;
983
+ (_a = this.tvShowsDropdown) === null || _a === void 0 ? void 0 : _a.classList.add('loading');
984
+ await this.dataSource.populateTVChannelMaps();
985
+ (_b = this.tvShowsDropdown) === null || _b === void 0 ? void 0 : _b.classList.remove('loading');
986
+ }
987
+ async networksDropdownChanged() {
988
+ var _a;
989
+ if (((_a = this.tvNetworksDropdown) === null || _a === void 0 ? void 0 : _a.selectedIndex) === 0) {
990
+ this.selectedTVNetwork = undefined;
991
+ return;
992
+ }
993
+ this.selectedTVNetwork = this.tvNetworksDropdown.selectedOptions[0].value;
994
+ let newNetworkFacets = getDefaultSelectedFacets();
995
+ for (const [channel, network,] of this.dataSource.tvChannelMaps.channelToNetwork.entries()) {
996
+ if (network === this.selectedTVNetwork) {
997
+ newNetworkFacets = updateSelectedFacetBucket(newNetworkFacets, 'creator', {
998
+ key: channel.toLowerCase(),
999
+ count: 0,
1000
+ state: 'selected',
1001
+ });
1002
+ }
1003
+ }
1004
+ log(newNetworkFacets);
1005
+ this.selectedFacets = mergeSelectedFacets(this.selectedFacets, newNetworkFacets);
1006
+ log(this.selectedFacets);
1007
+ }
1008
+ async showsDropdownChanged() {
1009
+ var _a;
1010
+ if (((_a = this.tvShowsDropdown) === null || _a === void 0 ? void 0 : _a.selectedIndex) === 0) {
1011
+ this.selectedTVShow = undefined;
1012
+ return;
1013
+ }
1014
+ this.selectedTVShow = this.tvShowsDropdown.selectedOptions[0].value;
1015
+ this.selectedFacets = updateSelectedFacetBucket(this.selectedFacets, 'program', {
1016
+ key: this.selectedTVShow,
1017
+ count: 0,
1018
+ state: 'selected',
1019
+ });
1020
+ }
1021
+ get tvDropdownFiltersTemplate() {
1022
+ if (this.searchType !== SearchType.TV)
1023
+ return nothing;
1024
+ log('start filters template preprocess', Date.now());
1025
+ const { channelToNetwork, programToChannels } = this.dataSource.tvChannelMaps;
1026
+ const networks = channelToNetwork
1027
+ ? [...new Set(channelToNetwork.values())]
1028
+ : [];
1029
+ let showEntries = programToChannels ? [...programToChannels.entries()] : [];
1030
+ if (channelToNetwork && this.selectedTVNetwork) {
1031
+ showEntries = showEntries.filter(([, channels]) => Object.keys(channels).some(c => channelToNetwork.get(c) === this.selectedTVNetwork));
1032
+ }
1033
+ const shows = showEntries.map(([show]) => show);
1034
+ log('end filters template preprocess', Date.now());
1035
+ return html `
1036
+ <div id="tv-filters" slot="facets-top">
1037
+ <select
1038
+ id="tv-networks"
1039
+ class="tv-filter-dropdown"
1040
+ @click=${this.networksDropdownClicked}
1041
+ @change=${this.networksDropdownChanged}
1042
+ >
1043
+ <option selected value="">${msg('Filter by Network')}</option>
1044
+ ${map(networks, n => html `<option>${n}</option>`)}
1045
+ </select>
1046
+ <select
1047
+ id="tv-shows"
1048
+ class="tv-filter-dropdown"
1049
+ @click=${this.showsDropdownClicked}
1050
+ @change=${this.showsDropdownChanged}
1051
+ >
1052
+ <option selected value="">${msg('Filter by Show')}</option>
1053
+ ${map(shows, s => html `<option>${s}</option>`)}
1054
+ </select>
1055
+ </div>
1056
+ `;
1057
+ }
972
1058
  /**
973
1059
  * The template for the facets component alone, without any surrounding wrappers.
974
1060
  */
@@ -1026,6 +1112,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1026
1112
  @facetsChanged=${this.facetsChanged}
1027
1113
  @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
1028
1114
  >
1115
+ ${this.tvDropdownFiltersTemplate}
1029
1116
  </collection-facets>
1030
1117
  `;
1031
1118
  // If we are using one of the opt-in facet load strategies, we may need to wrap the
@@ -1141,7 +1228,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1141
1228
  * represent, such as the search query, sort option, and any filters applied.
1142
1229
  */
1143
1230
  async installDataSourceAndQueryState(dataSource, queryState) {
1144
- var _a, _b, _c;
1231
+ var _a, _b;
1145
1232
  log('Installing data source & query state in CB:', dataSource, queryState);
1146
1233
  if (this.dataSource)
1147
1234
  this.removeController(this.dataSource);
@@ -1159,7 +1246,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1159
1246
  this.sortDirection = queryState.sortDirection;
1160
1247
  this.selectedTitleFilter = queryState.selectedTitleFilter;
1161
1248
  this.selectedCreatorFilter = queryState.selectedCreatorFilter;
1162
- this.tvClipFilter = (_c = queryState.tvClipFilter) !== null && _c !== void 0 ? _c : 'all';
1163
1249
  this.pagesToRender = this.initialPageNumber;
1164
1250
  // We set this flag during the update to prevent the URL state persistence
1165
1251
  // from creating an unwanted extra history entry.
@@ -1488,7 +1574,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1488
1574
  sortDirection: this.sortDirection,
1489
1575
  selectedTitleFilter: this.selectedTitleFilter,
1490
1576
  selectedCreatorFilter: this.selectedCreatorFilter,
1491
- tvClipFilter: this.tvClipFilter,
1492
1577
  },
1493
1578
  }));
1494
1579
  }
@@ -1606,7 +1691,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1606
1691
  this.restoreState();
1607
1692
  }
1608
1693
  restoreState() {
1609
- var _a, _b, _c, _d, _e, _f;
1694
+ var _a, _b, _c, _d, _e;
1610
1695
  const restorationState = this.restorationStateHandler.getRestorationState();
1611
1696
  this.displayMode = restorationState.displayMode;
1612
1697
  if (!this.suppressURLSinParam && restorationState.searchType != null)
@@ -1621,7 +1706,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1621
1706
  this.currentPage = (_e = restorationState.currentPage) !== null && _e !== void 0 ? _e : 1;
1622
1707
  this.minSelectedDate = restorationState.minSelectedDate;
1623
1708
  this.maxSelectedDate = restorationState.maxSelectedDate;
1624
- this.tvClipFilter = (_f = restorationState.tvClipFilter) !== null && _f !== void 0 ? _f : 'all';
1625
1709
  if (this.currentPage > 1) {
1626
1710
  this.goToPage(this.currentPage);
1627
1711
  }
@@ -1642,7 +1726,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
1642
1726
  maxSelectedDate: this.maxSelectedDate,
1643
1727
  selectedTitleFilter: (_c = this.selectedTitleFilter) !== null && _c !== void 0 ? _c : undefined,
1644
1728
  selectedCreatorFilter: (_d = this.selectedCreatorFilter) !== null && _d !== void 0 ? _d : undefined,
1645
- tvClipFilter: this.tvClipFilter,
1646
1729
  };
1647
1730
  const persistOptions = {
1648
1731
  forceReplace: this.dataSourceInstallInProgress,
@@ -2184,6 +2267,16 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
2184
2267
  line-height: 1.3rem;
2185
2268
  }
2186
2269
 
2270
+ #tv-filters {
2271
+ margin-bottom: 15px;
2272
+ }
2273
+
2274
+ .tv-filter-dropdown {
2275
+ width: 100%;
2276
+ padding: 3px;
2277
+ margin-bottom: 5px;
2278
+ }
2279
+
2187
2280
  #facets-container {
2188
2281
  position: relative;
2189
2282
  max-height: 0;
@@ -2389,9 +2482,6 @@ __decorate([
2389
2482
  __decorate([
2390
2483
  property({ type: String })
2391
2484
  ], CollectionBrowser.prototype, "selectedCreatorFilter", void 0);
2392
- __decorate([
2393
- property({ type: String })
2394
- ], CollectionBrowser.prototype, "tvClipFilter", void 0);
2395
2485
  __decorate([
2396
2486
  property({ type: String })
2397
2487
  ], CollectionBrowser.prototype, "sortDirection", void 0);
@@ -2560,6 +2650,18 @@ __decorate([
2560
2650
  __decorate([
2561
2651
  query('infinite-scroller')
2562
2652
  ], CollectionBrowser.prototype, "infiniteScroller", void 0);
2653
+ __decorate([
2654
+ state()
2655
+ ], CollectionBrowser.prototype, "selectedTVNetwork", void 0);
2656
+ __decorate([
2657
+ state()
2658
+ ], CollectionBrowser.prototype, "selectedTVShow", void 0);
2659
+ __decorate([
2660
+ query('#tv-networks')
2661
+ ], CollectionBrowser.prototype, "tvNetworksDropdown", void 0);
2662
+ __decorate([
2663
+ query('#tv-shows')
2664
+ ], CollectionBrowser.prototype, "tvShowsDropdown", void 0);
2563
2665
  CollectionBrowser = __decorate([
2564
2666
  customElement('collection-browser')
2565
2667
  ], CollectionBrowser);