@internetarchive/collection-browser 1.2.1-alpha.1 → 1.2.1-alpha.2
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/dist/index.d.ts +9 -9
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/src/app-root.d.ts +1 -1
- package/dist/src/app-root.js +1 -1
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +45 -13
- package/dist/src/collection-browser.js +98 -38
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facets-template.d.ts +1 -1
- package/dist/src/collection-facets/facets-template.js +3 -3
- package/dist/src/collection-facets/facets-template.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +5 -5
- package/dist/src/collection-facets/more-facets-content.js +7 -7
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/more-facets-pagination.js +3 -3
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
- package/dist/src/collection-facets/toggle-switch.js +1 -1
- package/dist/src/collection-facets/toggle-switch.js.map +1 -1
- package/dist/src/collection-facets.d.ts +5 -5
- package/dist/src/collection-facets.js +10 -10
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/empty-placeholder.js +2 -2
- package/dist/src/empty-placeholder.js.map +1 -1
- package/dist/src/language-code-handler/language-code-handler.js +1 -1
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
- package/dist/src/mediatype/mediatype-config.js +13 -13
- package/dist/src/mediatype/mediatype-config.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +1 -1
- package/dist/src/restoration-state-handler.js +2 -2
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +2 -2
- package/dist/src/sort-filter-bar/alpha-bar.js +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +2 -2
- package/dist/src/sort-filter-bar/sort-filter-bar.js +9 -9
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/grid/account-tile.d.ts +3 -3
- package/dist/src/tiles/grid/account-tile.js +3 -3
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.d.ts +2 -2
- package/dist/src/tiles/grid/collection-tile.js +4 -4
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.d.ts +6 -6
- package/dist/src/tiles/grid/item-tile.js +8 -8
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
- package/dist/src/tiles/grid/tile-stats.js +6 -6
- package/dist/src/tiles/grid/tile-stats.js.map +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.d.ts +1 -1
- package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
- package/dist/src/tiles/hover/tile-hover-pane.d.ts +2 -2
- package/dist/src/tiles/hover/tile-hover-pane.js +1 -1
- package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
- package/dist/src/tiles/image-block.d.ts +3 -3
- package/dist/src/tiles/image-block.js +2 -2
- package/dist/src/tiles/image-block.js.map +1 -1
- package/dist/src/tiles/item-image.d.ts +1 -1
- package/dist/src/tiles/item-image.js +1 -1
- package/dist/src/tiles/item-image.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.js +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact.d.ts +3 -3
- package/dist/src/tiles/list/tile-list-compact.js +6 -6
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +3 -3
- package/dist/src/tiles/list/tile-list.js +8 -8
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/mediatype-icon.js +1 -1
- package/dist/src/tiles/mediatype-icon.js.map +1 -1
- package/dist/src/tiles/overlay/icon-overlay.js +2 -2
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
- package/dist/src/tiles/overlay/icon-text-overlay.js +2 -2
- package/dist/src/tiles/overlay/icon-text-overlay.js.map +1 -1
- package/dist/src/tiles/overlay/text-overlay.js +2 -2
- package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +10 -11
- package/dist/src/tiles/tile-dispatcher.js +8 -14
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/utils/sha1.d.ts +2 -0
- package/dist/src/utils/sha1.js +9 -0
- package/dist/src/utils/sha1.js.map +1 -0
- package/dist/test/collection-browser.test.js +25 -10
- package/dist/test/collection-browser.test.js.map +1 -1
- package/index.ts +9 -9
- package/package.json +15 -15
- package/src/app-root.ts +2 -2
- package/src/collection-browser.ts +127 -37
- package/src/collection-facets/facets-template.ts +3 -3
- package/src/collection-facets/more-facets-content.ts +7 -7
- package/src/collection-facets/more-facets-pagination.ts +3 -3
- package/src/collection-facets/toggle-switch.ts +1 -1
- package/src/collection-facets.ts +10 -10
- package/src/empty-placeholder.ts +2 -2
- package/src/language-code-handler/language-code-handler.ts +1 -1
- package/src/mediatype/mediatype-config.ts +13 -13
- package/src/restoration-state-handler.ts +2 -2
- package/src/sort-filter-bar/alpha-bar.ts +3 -3
- package/src/sort-filter-bar/sort-filter-bar.ts +10 -10
- package/src/tiles/grid/account-tile.ts +4 -4
- package/src/tiles/grid/collection-tile.ts +5 -5
- package/src/tiles/grid/item-tile.ts +10 -10
- package/src/tiles/grid/styles/tile-grid-shared-styles.ts +1 -1
- package/src/tiles/grid/tile-stats.ts +6 -6
- package/src/tiles/hover/hover-pane-controller.ts +1 -1
- package/src/tiles/hover/tile-hover-pane.ts +2 -2
- package/src/tiles/image-block.ts +3 -3
- package/src/tiles/item-image.ts +2 -2
- package/src/tiles/list/tile-list-compact-header.ts +2 -2
- package/src/tiles/list/tile-list-compact.ts +7 -7
- package/src/tiles/list/tile-list.ts +8 -8
- package/src/tiles/mediatype-icon.ts +1 -1
- package/src/tiles/overlay/icon-overlay.ts +2 -2
- package/src/tiles/overlay/icon-text-overlay.ts +2 -2
- package/src/tiles/overlay/text-overlay.ts +2 -2
- package/src/tiles/tile-dispatcher.ts +10 -13
- package/src/utils/sha1.ts +9 -0
- package/test/collection-browser.test.ts +25 -10
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { CollectionBrowser } from './src/collection-browser
|
|
2
|
-
export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar
|
|
3
|
-
export { CollectionDisplayMode } from './src/models
|
|
4
|
-
export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile
|
|
5
|
-
export { CollectionTile } from './src/tiles/grid/collection-tile
|
|
6
|
-
export { AccountTile } from './src/tiles/grid/account-tile
|
|
7
|
-
export { ItemTile } from './src/tiles/grid/item-tile
|
|
8
|
-
export { TileList } from './src/tiles/list/tile-list
|
|
9
|
-
export { TileListCompact } from './src/tiles/list/tile-list-compact
|
|
1
|
+
export { CollectionBrowser } from './src/collection-browser';
|
|
2
|
+
export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';
|
|
3
|
+
export { CollectionDisplayMode } from './src/models';
|
|
4
|
+
export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';
|
|
5
|
+
export { CollectionTile } from './src/tiles/grid/collection-tile';
|
|
6
|
+
export { AccountTile } from './src/tiles/grid/account-tile';
|
|
7
|
+
export { ItemTile } from './src/tiles/grid/item-tile';
|
|
8
|
+
export { TileList } from './src/tiles/list/tile-list';
|
|
9
|
+
export { TileListCompact } from './src/tiles/list/tile-list-compact';
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { CollectionBrowser } from './src/collection-browser
|
|
2
|
-
export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar
|
|
3
|
-
export {} from './src/models
|
|
4
|
-
export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile
|
|
5
|
-
export { CollectionTile } from './src/tiles/grid/collection-tile
|
|
6
|
-
export { AccountTile } from './src/tiles/grid/account-tile
|
|
7
|
-
export { ItemTile } from './src/tiles/grid/item-tile
|
|
8
|
-
export { TileList } from './src/tiles/list/tile-list
|
|
9
|
-
export { TileListCompact } from './src/tiles/list/tile-list-compact
|
|
1
|
+
export { CollectionBrowser } from './src/collection-browser';
|
|
2
|
+
export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';
|
|
3
|
+
export {} from './src/models';
|
|
4
|
+
export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';
|
|
5
|
+
export { CollectionTile } from './src/tiles/grid/collection-tile';
|
|
6
|
+
export { AccountTile } from './src/tiles/grid/account-tile';
|
|
7
|
+
export { ItemTile } from './src/tiles/grid/item-tile';
|
|
8
|
+
export { TileList } from './src/tiles/list/tile-list';
|
|
9
|
+
export { TileListCompact } from './src/tiles/list/tile-list-compact';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAyB,MAAM,cAAc,CAAC;AACrD,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 { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';\nexport { CollectionDisplayMode } 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"]}
|
package/dist/src/app-root.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AnalyticsEvent } from '@internetarchive/analytics-manager';
|
|
2
2
|
import { LitElement, PropertyValues } from 'lit';
|
|
3
|
-
import '../src/collection-browser
|
|
3
|
+
import '../src/collection-browser';
|
|
4
4
|
export declare class AppRoot extends LitElement {
|
|
5
5
|
private searchService;
|
|
6
6
|
private resizeObserver;
|
package/dist/src/app-root.js
CHANGED
|
@@ -7,7 +7,7 @@ import { html, css, LitElement } from 'lit';
|
|
|
7
7
|
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
8
8
|
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
|
9
9
|
import { CollectionNameCache } from '@internetarchive/collection-name-cache';
|
|
10
|
-
import '../src/collection-browser
|
|
10
|
+
import '../src/collection-browser';
|
|
11
11
|
let AppRoot = class AppRoot extends LitElement {
|
|
12
12
|
constructor() {
|
|
13
13
|
super(...arguments);
|
package/dist/src/app-root.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport {\n AnalyticsEvent,\n AnalyticsManager,\n} from '@internetarchive/analytics-manager';\nimport {\n SearchService,\n SearchServiceInterface,\n SearchType,\n StringField,\n} from '@internetarchive/search-service';\nimport { LocalCache } from '@internetarchive/local-cache';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { CollectionNameCache } from '@internetarchive/collection-name-cache';\n\nimport type { ModalManagerInterface } from '@internetarchive/modal-manager';\nimport type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';\nimport type { CollectionBrowser } from '../src/collection-browser.js';\n\nimport '../src/collection-browser.js';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService: SearchServiceInterface =\n this.initSearchServiceFromUrlParams();\n\n private resizeObserver = new SharedResizeObserver();\n\n private localCache = new LocalCache();\n\n private collectionNameCache = new CollectionNameCache({\n searchService: this.searchService,\n localCache: this.localCache,\n });\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @state() private loggedIn: boolean = false;\n\n @state() private searchType: SearchType = SearchType.METADATA;\n\n @property({ type: Object, reflect: false }) latestAction?: AnalyticsEvent;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n @query('modal-manager') private modalManager!: ModalManagerInterface;\n\n private analyticsManager = new AnalyticsManager();\n\n private analyticsHandler: AnalyticsManagerInterface = {\n sendPing: this.sendAnalytics.bind(this),\n sendEvent: this.sendAnalytics.bind(this),\n sendEventNoSampling: this.sendAnalytics.bind(this),\n };\n\n private sendAnalytics(ae: AnalyticsEvent) {\n console.log('Analytics Received ----', ae);\n this.latestAction = ae;\n this.analyticsManager?.sendEvent(ae);\n }\n\n private initSearchServiceFromUrlParams() {\n const params = new URL(window.location.href).searchParams;\n return new SearchService({\n includeCredentials: false,\n baseUrl: params.get('search_base_url') ?? undefined,\n servicePath: params.get('search_service_path') ?? undefined,\n debuggingEnabled: !!params.get('debugging') ?? undefined,\n });\n }\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n this.collectionBrowser.searchType = this.searchType;\n\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected override updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n private get getClass() {\n const searchParams = new URLSearchParams(window.location.search);\n\n return searchParams.get('hide-dev-tools') ? 'hidden' : '';\n }\n\n render() {\n return html`\n <div class=\"dev-tool-container\">\n <div id=\"dev-tools\" class=${this.getClass}>\n <div id=\"search-and-page-inputs\">\n <form @submit=${this.searchPressed}>\n <label for=\"base-query-field\"> Query: </label>\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n <form @submit=${this.changePagePressed}>\n <label for=\"page-number-input\"> Page: </label>\n <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n </div>\n\n <div id=\"search-types\">\n Search type:\n <span class=\"search-type\">\n <input\n type=\"radio\"\n id=\"metadata-search\"\n name=\"search-type\"\n value=\"metadata\"\n .checked=${this.searchType === SearchType.METADATA}\n @click=${this.searchTypeSelected}\n />\n <label for=\"metadata-search\">Metadata</label>\n </span>\n <span class=\"search-type\">\n <input\n type=\"radio\"\n id=\"fulltext-search\"\n name=\"search-type\"\n value=\"fulltext\"\n .checked=${this.searchType === SearchType.FULLTEXT}\n @click=${this.searchTypeSelected}\n />\n <label for=\"fulltext-search\">Full text</label>\n </span>\n </div>\n\n <div id=\"toggle-controls\">\n <button\n @click=${() => {\n const details =\n this.shadowRoot?.getElementById('cell-size-control');\n details?.classList.toggle('hidden');\n const rowGapControls =\n this.shadowRoot?.getElementById('cell-gap-control');\n rowGapControls?.classList.toggle('hidden');\n }}\n >\n Toggle Cell Controls\n </button>\n <button\n @click=${() => {\n const details = this.shadowRoot?.getElementById(\n 'latest-event-details'\n );\n details?.classList.toggle('hidden');\n }}\n >\n Last Event Captured\n </button>\n </div>\n\n <div id=\"last-event\">\n <pre id=\"latest-event-details\" class=\"hidden\">\n ${JSON.stringify(this.latestAction, null, 2)}\n </pre\n >\n </div>\n\n <div id=\"cell-controls\" class=\"hidden\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Min cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n <div id=\"checkbox-controls\">\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n <label for=\"show-outline-check\">Show cell outlines</label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"show-facet-group-outline-check\"\n @click=${this.toggleFacetGroupOutline}\n />\n <label for=\"show-facet-group-outline-check\">\n Show facet group outlines\n </label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"simulate-login\"\n @click=${this.loginChanged}\n />\n <label for=\"simulate-login\">Simulate login</label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"show-dummy-snippets\"\n @click=${this.snippetsChanged}\n />\n <label for=\"show-dummy-snippets\">Show dummy snippets</label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"enable-date-picker\"\n checked\n @click=${this.datePickerChanged}\n />\n <label for=\"enable-date-picker\">Enable date picker</label>\n </div>\n </div>\n </div>\n <button id=\"toggle-dev-tools-btn\" @click=${this.toggleDevTools}>\n Toggle Search Controls\n </button>\n </div>\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .baseImageUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n .collectionNameCache=${this.collectionNameCache}\n .showHistogramDatePicker=${true}\n .loggedIn=${this.loggedIn}\n .modalManager=${this.modalManager}\n .analyticsHandler=${this.analyticsHandler}\n @visiblePageChanged=${this.visiblePageChanged}\n @baseQueryChanged=${this.baseQueryChanged}\n @searchTypeChanged=${this.searchTypeChanged}\n >\n </collection-browser>\n </div>\n <modal-manager></modal-manager>\n `;\n }\n\n private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>): void {\n this.searchQuery = e.detail.baseQuery;\n }\n\n /** Handler for search type changes coming from collection browser */\n private searchTypeChanged(e: CustomEvent<SearchType>): void {\n this.searchType = e.detail;\n }\n\n /** Handler for user input selecting a search type */\n private searchTypeSelected(e: Event) {\n const target = e.target as HTMLInputElement;\n this.searchType =\n target.value === 'fulltext' ? SearchType.FULLTEXT : SearchType.METADATA;\n }\n\n private loginChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.loggedIn = true;\n } else {\n this.loggedIn = false;\n }\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private toggleDevTools() {\n const pageUrl = new URL(window.location.href);\n const { searchParams } = pageUrl;\n\n if (searchParams.get('hide-dev-tools')) {\n searchParams.delete('hide-dev-tools');\n } else {\n searchParams.set('hide-dev-tools', 'true');\n }\n\n this.shadowRoot?.getElementById('dev-tools')?.classList.toggle('hidden');\n\n if (window.history.replaceState) {\n window.history.replaceState(\n {\n path: pageUrl.toString(),\n },\n '',\n pageUrl.toString()\n );\n }\n }\n\n private toggleFacetGroupOutline(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.classList.add('showFacetGroupOutlines');\n this.modalManager.classList.add('showFacetGroupOutlines');\n } else {\n this.collectionBrowser.classList.remove('showFacetGroupOutlines');\n this.modalManager.classList.remove('showFacetGroupOutlines');\n }\n }\n\n private async snippetsChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n // Decorate the default search service with a wrapper that adds\n // dummy snippets to any successful searches\n this.searchService = {\n async search(params, searchType) {\n const searchResponse = await SearchService.default.search(\n params,\n searchType\n );\n searchResponse.success?.response.results.forEach(result => {\n Object.defineProperty(result, 'highlight', {\n value: new StringField([\n 'this is a text {{{snippet}}} block with potentially',\n 'multiple {{{snippets}}} and such',\n 'but the {{{snippet}}} block may be quite long perhaps',\n 'depending on how many {{{snippet}}} matches there are',\n 'there may be multiple lines of {{{snippets}}} to show',\n 'but each {{{snippet}}} should be relatively short',\n 'and {{{snippets}}} are each a {{{snippet}}} of text',\n 'but every {{{snippet}}} might have multiple matches',\n 'the {{{snippets}}} should be separated and surrounded by ellipses',\n ]),\n });\n });\n return searchResponse;\n },\n };\n } else {\n // Restore the default seach service\n this.searchService = SearchService.default;\n }\n\n // Re-perform the current search to show/hide the snippets immediately\n this.reperformCurrentSearch();\n }\n\n private async reperformCurrentSearch(): Promise<void> {\n const oldQuery = this.searchQuery;\n this.searchQuery = ''; // Should just reset to the placeholder\n await this.updateComplete;\n // For unclear reasons, Safari refuses to re-apply the old query until the next tick, hence:\n await new Promise(res => {\n setTimeout(res, 0);\n });\n this.searchQuery = oldQuery; // Re-apply the original query\n }\n\n private datePickerChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n this.collectionBrowser.showHistogramDatePicker = target.checked;\n\n // When disabling the date picker from the demo app, also clear any existing date range params\n if (!this.collectionBrowser.showHistogramDatePicker) {\n this.collectionBrowser.minSelectedDate = undefined;\n this.collectionBrowser.maxSelectedDate = undefined;\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n --primaryButtonBGColor: #194880;\n --ia-theme-link-color: #4b64ff;\n }\n\n /* add the following styles to ensure proper modal visibility */\n body.modal-manager-open {\n overflow: hidden;\n }\n modal-manager {\n display: none;\n }\n modal-manager[mode='open'] {\n display: block;\n }\n modal-manager.more-search-facets {\n --modalWidth: 85rem;\n --modalBorder: 2px solid var(--primaryButtonBGColor, #194880);\n --modalTitleLineHeight: 4rem;\n --modalTitleFontSize: 1.8rem;\n --modalCornerRadius: 0;\n --modalBottomPadding: 0;\n --modalBottomMargin: 0;\n --modalScrollOffset: 0;\n --modalCornerRadius: 0.5rem;\n }\n modal-manager.expanded-date-picker {\n --modalWidth: 58rem;\n --modalBorder: 2px solid var(--primaryButtonBGColor, #194880);\n --modalTitleLineHeight: 4rem;\n --modalTitleFontSize: 1.8rem;\n --modalCornerRadius: 0;\n --modalBottomPadding: 0;\n --modalBottomMargin: 0;\n --modalScrollOffset: 0;\n --modalCornerRadius: 0.5rem;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n modal-manager.showFacetGroupOutlines,\n collection-browser.showFacetGroupOutlines {\n --facet-row-border-top: 1px solid red;\n --facet-row-border-bottom: 1px solid blue;\n }\n\n collection-browser {\n /* Same as production */\n max-width: 135rem;\n margin: auto;\n }\n\n #collection-browser-container {\n /* Same as production */\n padding-left: 0.5rem;\n margin-bottom: 2rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n .dev-tool-container {\n position: relative;\n }\n #dev-tools {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n font-size: 1.4rem;\n width: 75%;\n background: #ffffffb3;\n }\n\n #dev-tools > * {\n display: flex;\n }\n\n #toggle-dev-tools-btn {\n position: fixed;\n left: 77.4%;\n top: 0;\n background: red;\n padding: 5px;\n color: white;\n font-size: 1.4rem;\n margin: 0;\n z-index: 1;\n cursor: pointer;\n }\n\n #search-and-page-inputs {\n flex-wrap: wrap;\n row-gap: 2px;\n }\n\n #search-and-page-inputs > form {\n margin-right: 1rem;\n }\n\n #search-and-page-inputs label {\n display: inline-block;\n min-width: 50px;\n }\n\n #page-number-input {\n width: 75px;\n }\n\n .search-type {\n margin-right: 1rem;\n }\n\n #cell-controls {\n display: flex;\n flex-wrap: wrap;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-size-control,\n #cell-gap-control {\n flex-basis: calc(50% - 1rem);\n flex-grow: 1;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n\n #checkbox-controls {\n padding-top: 0.5rem;\n flex-wrap: wrap;\n }\n\n .checkbox-control {\n flex-basis: 50%;\n }\n\n #last-event {\n background-color: aliceblue;\n padding: 5px;\n margin: 5px auto;\n }\n\n .hidden {\n display: none;\n }\n\n #toggle-controls {\n background-color: lightskyblue;\n padding: 5px;\n margin: 5px auto;\n }\n\n #search-types {\n margin: 5px auto;\n background-color: aliceblue;\n font-size: 1.6rem;\n }\n `;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"app-root.js","sourceRoot":"","sources":["../../src/app-root.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport {\n AnalyticsEvent,\n AnalyticsManager,\n} from '@internetarchive/analytics-manager';\nimport {\n SearchService,\n SearchServiceInterface,\n SearchType,\n StringField,\n} from '@internetarchive/search-service';\nimport { LocalCache } from '@internetarchive/local-cache';\nimport { html, css, LitElement, PropertyValues } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { SharedResizeObserver } from '@internetarchive/shared-resize-observer';\nimport { CollectionNameCache } from '@internetarchive/collection-name-cache';\n\nimport type { ModalManagerInterface } from '@internetarchive/modal-manager';\nimport type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';\nimport type { CollectionBrowser } from '../src/collection-browser';\n\nimport '../src/collection-browser';\n\n@customElement('app-root')\nexport class AppRoot extends LitElement {\n private searchService: SearchServiceInterface =\n this.initSearchServiceFromUrlParams();\n\n private resizeObserver = new SharedResizeObserver();\n\n private localCache = new LocalCache();\n\n private collectionNameCache = new CollectionNameCache({\n searchService: this.searchService,\n localCache: this.localCache,\n });\n\n @state() private currentPage?: number;\n\n @state() private searchQuery?: string;\n\n @state() private cellWidth: number = 18;\n\n @state() private cellHeight: number = 29;\n\n @state() private rowGap: number = 1.7;\n\n @state() private colGap: number = 1.7;\n\n @state() private loggedIn: boolean = false;\n\n @state() private searchType: SearchType = SearchType.METADATA;\n\n @property({ type: Object, reflect: false }) latestAction?: AnalyticsEvent;\n\n @query('#base-query-field') private baseQueryField!: HTMLInputElement;\n\n @query('#page-number-input') private pageNumberInput!: HTMLInputElement;\n\n @query('collection-browser') private collectionBrowser!: CollectionBrowser;\n\n @query('modal-manager') private modalManager!: ModalManagerInterface;\n\n private analyticsManager = new AnalyticsManager();\n\n private analyticsHandler: AnalyticsManagerInterface = {\n sendPing: this.sendAnalytics.bind(this),\n sendEvent: this.sendAnalytics.bind(this),\n sendEventNoSampling: this.sendAnalytics.bind(this),\n };\n\n private sendAnalytics(ae: AnalyticsEvent) {\n console.log('Analytics Received ----', ae);\n this.latestAction = ae;\n this.analyticsManager?.sendEvent(ae);\n }\n\n private initSearchServiceFromUrlParams() {\n const params = new URL(window.location.href).searchParams;\n return new SearchService({\n includeCredentials: false,\n baseUrl: params.get('search_base_url') ?? undefined,\n servicePath: params.get('search_service_path') ?? undefined,\n debuggingEnabled: !!params.get('debugging') ?? undefined,\n });\n }\n\n private searchPressed(e: Event) {\n e.preventDefault();\n this.searchQuery = this.baseQueryField.value;\n this.collectionBrowser.searchType = this.searchType;\n\n if ((this.currentPage ?? 1) > 1) {\n this.collectionBrowser.goToPage(this.currentPage ?? 1);\n }\n }\n\n private changePagePressed(e: Event) {\n e.preventDefault();\n this.currentPage = this.pageNumberInput.valueAsNumber;\n this.collectionBrowser.goToPage(this.currentPage);\n }\n\n protected override updated(changed: PropertyValues): void {\n if (changed.has('currentPage') && this.currentPage) {\n this.pageNumberInput.value = this.currentPage.toString();\n }\n\n if (changed.has('searchQuery')) {\n this.queryUpdated();\n }\n }\n\n private queryUpdated() {\n this.collectionBrowser.baseQuery = this.searchQuery;\n }\n\n private get getClass() {\n const searchParams = new URLSearchParams(window.location.search);\n\n return searchParams.get('hide-dev-tools') ? 'hidden' : '';\n }\n\n render() {\n return html`\n <div class=\"dev-tool-container\">\n <div id=\"dev-tools\" class=${this.getClass}>\n <div id=\"search-and-page-inputs\">\n <form @submit=${this.searchPressed}>\n <label for=\"base-query-field\"> Query: </label>\n <input\n type=\"text\"\n id=\"base-query-field\"\n .value=${this.searchQuery ?? ''}\n />\n <input type=\"submit\" value=\"Search\" />\n </form>\n <form @submit=${this.changePagePressed}>\n <label for=\"page-number-input\"> Page: </label>\n <input type=\"number\" value=\"1\" id=\"page-number-input\" />\n <input type=\"submit\" value=\"Go\" />\n </form>\n </div>\n\n <div id=\"search-types\">\n Search type:\n <span class=\"search-type\">\n <input\n type=\"radio\"\n id=\"metadata-search\"\n name=\"search-type\"\n value=\"metadata\"\n .checked=${this.searchType === SearchType.METADATA}\n @click=${this.searchTypeSelected}\n />\n <label for=\"metadata-search\">Metadata</label>\n </span>\n <span class=\"search-type\">\n <input\n type=\"radio\"\n id=\"fulltext-search\"\n name=\"search-type\"\n value=\"fulltext\"\n .checked=${this.searchType === SearchType.FULLTEXT}\n @click=${this.searchTypeSelected}\n />\n <label for=\"fulltext-search\">Full text</label>\n </span>\n </div>\n\n <div id=\"toggle-controls\">\n <button\n @click=${() => {\n const details =\n this.shadowRoot?.getElementById('cell-size-control');\n details?.classList.toggle('hidden');\n const rowGapControls =\n this.shadowRoot?.getElementById('cell-gap-control');\n rowGapControls?.classList.toggle('hidden');\n }}\n >\n Toggle Cell Controls\n </button>\n <button\n @click=${() => {\n const details = this.shadowRoot?.getElementById(\n 'latest-event-details'\n );\n details?.classList.toggle('hidden');\n }}\n >\n Last Event Captured\n </button>\n </div>\n\n <div id=\"last-event\">\n <pre id=\"latest-event-details\" class=\"hidden\">\n ${JSON.stringify(this.latestAction, null, 2)}\n </pre\n >\n </div>\n\n <div id=\"cell-controls\" class=\"hidden\">\n <div id=\"cell-size-control\">\n <div>\n <label for=\"cell-width-slider\">Min cell width:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"18\"\n step=\"0.1\"\n id=\"cell-width-slider\"\n @input=${this.widthChanged}\n />\n <span>${this.cellWidth}rem</span>\n </div>\n <div>\n <label for=\"cell-height-slider\">Cell height:</label>\n <input\n type=\"range\"\n min=\"10\"\n max=\"100\"\n value=\"29\"\n step=\"0.1\"\n id=\"cell-height-slider\"\n @input=${this.heightChanged}\n />\n <span>${this.cellHeight}rem</span>\n </div>\n </div>\n <div id=\"cell-gap-control\">\n <div>\n <label for=\"cell-row-gap-slider\">Row gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-row-gap-slider\"\n @input=${this.rowGapChanged}\n />\n <span>${this.rowGap}rem</span>\n </div>\n <div>\n <label for=\"cell-col-gap-slider\">Col gap:</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"5\"\n value=\"1.7\"\n step=\"0.1\"\n id=\"cell-col-gap-slider\"\n @input=${this.colGapChanged}\n />\n <span>${this.colGap}rem</span>\n </div>\n </div>\n </div>\n <div id=\"checkbox-controls\">\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"show-outline-check\"\n @click=${this.outlineChanged}\n />\n <label for=\"show-outline-check\">Show cell outlines</label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"show-facet-group-outline-check\"\n @click=${this.toggleFacetGroupOutline}\n />\n <label for=\"show-facet-group-outline-check\">\n Show facet group outlines\n </label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"simulate-login\"\n @click=${this.loginChanged}\n />\n <label for=\"simulate-login\">Simulate login</label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"show-dummy-snippets\"\n @click=${this.snippetsChanged}\n />\n <label for=\"show-dummy-snippets\">Show dummy snippets</label>\n </div>\n <div class=\"checkbox-control\">\n <input\n type=\"checkbox\"\n id=\"enable-date-picker\"\n checked\n @click=${this.datePickerChanged}\n />\n <label for=\"enable-date-picker\">Enable date picker</label>\n </div>\n </div>\n </div>\n <button id=\"toggle-dev-tools-btn\" @click=${this.toggleDevTools}>\n Toggle Search Controls\n </button>\n </div>\n <div id=\"collection-browser-container\">\n <collection-browser\n .baseNavigationUrl=${'https://archive.org'}\n .baseImageUrl=${'https://archive.org'}\n .searchService=${this.searchService}\n .resizeObserver=${this.resizeObserver}\n .collectionNameCache=${this.collectionNameCache}\n .showHistogramDatePicker=${true}\n .loggedIn=${this.loggedIn}\n .modalManager=${this.modalManager}\n .analyticsHandler=${this.analyticsHandler}\n @visiblePageChanged=${this.visiblePageChanged}\n @baseQueryChanged=${this.baseQueryChanged}\n @searchTypeChanged=${this.searchTypeChanged}\n >\n </collection-browser>\n </div>\n <modal-manager></modal-manager>\n `;\n }\n\n private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>): void {\n this.searchQuery = e.detail.baseQuery;\n }\n\n /** Handler for search type changes coming from collection browser */\n private searchTypeChanged(e: CustomEvent<SearchType>): void {\n this.searchType = e.detail;\n }\n\n /** Handler for user input selecting a search type */\n private searchTypeSelected(e: Event) {\n const target = e.target as HTMLInputElement;\n this.searchType =\n target.value === 'fulltext' ? SearchType.FULLTEXT : SearchType.METADATA;\n }\n\n private loginChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.loggedIn = true;\n } else {\n this.loggedIn = false;\n }\n }\n\n private outlineChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.style.setProperty(\n '--infiniteScrollerCellOutline',\n '1px solid #33D1FF'\n );\n } else {\n this.collectionBrowser.style.removeProperty(\n '--infiniteScrollerCellOutline'\n );\n }\n }\n\n private toggleDevTools() {\n const pageUrl = new URL(window.location.href);\n const { searchParams } = pageUrl;\n\n if (searchParams.get('hide-dev-tools')) {\n searchParams.delete('hide-dev-tools');\n } else {\n searchParams.set('hide-dev-tools', 'true');\n }\n\n this.shadowRoot?.getElementById('dev-tools')?.classList.toggle('hidden');\n\n if (window.history.replaceState) {\n window.history.replaceState(\n {\n path: pageUrl.toString(),\n },\n '',\n pageUrl.toString()\n );\n }\n }\n\n private toggleFacetGroupOutline(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n this.collectionBrowser.classList.add('showFacetGroupOutlines');\n this.modalManager.classList.add('showFacetGroupOutlines');\n } else {\n this.collectionBrowser.classList.remove('showFacetGroupOutlines');\n this.modalManager.classList.remove('showFacetGroupOutlines');\n }\n }\n\n private async snippetsChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n if (target.checked) {\n // Decorate the default search service with a wrapper that adds\n // dummy snippets to any successful searches\n this.searchService = {\n async search(params, searchType) {\n const searchResponse = await SearchService.default.search(\n params,\n searchType\n );\n searchResponse.success?.response.results.forEach(result => {\n Object.defineProperty(result, 'highlight', {\n value: new StringField([\n 'this is a text {{{snippet}}} block with potentially',\n 'multiple {{{snippets}}} and such',\n 'but the {{{snippet}}} block may be quite long perhaps',\n 'depending on how many {{{snippet}}} matches there are',\n 'there may be multiple lines of {{{snippets}}} to show',\n 'but each {{{snippet}}} should be relatively short',\n 'and {{{snippets}}} are each a {{{snippet}}} of text',\n 'but every {{{snippet}}} might have multiple matches',\n 'the {{{snippets}}} should be separated and surrounded by ellipses',\n ]),\n });\n });\n return searchResponse;\n },\n };\n } else {\n // Restore the default seach service\n this.searchService = SearchService.default;\n }\n\n // Re-perform the current search to show/hide the snippets immediately\n this.reperformCurrentSearch();\n }\n\n private async reperformCurrentSearch(): Promise<void> {\n const oldQuery = this.searchQuery;\n this.searchQuery = ''; // Should just reset to the placeholder\n await this.updateComplete;\n // For unclear reasons, Safari refuses to re-apply the old query until the next tick, hence:\n await new Promise(res => {\n setTimeout(res, 0);\n });\n this.searchQuery = oldQuery; // Re-apply the original query\n }\n\n private datePickerChanged(e: Event) {\n const target = e.target as HTMLInputElement;\n this.collectionBrowser.showHistogramDatePicker = target.checked;\n\n // When disabling the date picker from the demo app, also clear any existing date range params\n if (!this.collectionBrowser.showHistogramDatePicker) {\n this.collectionBrowser.minSelectedDate = undefined;\n this.collectionBrowser.maxSelectedDate = undefined;\n }\n }\n\n private rowGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.rowGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserRowGap',\n `${input.value}rem`\n );\n }\n\n private colGapChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.colGap = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserColGap',\n `${input.value}rem`\n );\n }\n\n private widthChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellWidth = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinWidth',\n `${input.value}rem`\n );\n }\n\n private heightChanged(e: Event) {\n const input = e.target as HTMLInputElement;\n this.cellHeight = parseFloat(input.value);\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMinHeight',\n `${input.value}rem`\n );\n this.collectionBrowser.style.setProperty(\n '--collectionBrowserCellMaxHeight',\n `${input.value}rem`\n );\n }\n\n private visiblePageChanged(e: CustomEvent<{ pageNumber: number }>) {\n const { pageNumber } = e.detail;\n if (pageNumber === this.currentPage) return;\n this.currentPage = pageNumber;\n }\n\n static styles = css`\n :host {\n display: block;\n --primaryButtonBGColor: #194880;\n --ia-theme-link-color: #4b64ff;\n }\n\n /* add the following styles to ensure proper modal visibility */\n body.modal-manager-open {\n overflow: hidden;\n }\n modal-manager {\n display: none;\n }\n modal-manager[mode='open'] {\n display: block;\n }\n modal-manager.more-search-facets {\n --modalWidth: 85rem;\n --modalBorder: 2px solid var(--primaryButtonBGColor, #194880);\n --modalTitleLineHeight: 4rem;\n --modalTitleFontSize: 1.8rem;\n --modalCornerRadius: 0;\n --modalBottomPadding: 0;\n --modalBottomMargin: 0;\n --modalScrollOffset: 0;\n --modalCornerRadius: 0.5rem;\n }\n modal-manager.expanded-date-picker {\n --modalWidth: 58rem;\n --modalBorder: 2px solid var(--primaryButtonBGColor, #194880);\n --modalTitleLineHeight: 4rem;\n --modalTitleFontSize: 1.8rem;\n --modalCornerRadius: 0;\n --modalBottomPadding: 0;\n --modalBottomMargin: 0;\n --modalScrollOffset: 0;\n --modalCornerRadius: 0.5rem;\n }\n\n input,\n button {\n font-size: 1.6rem;\n }\n\n modal-manager.showFacetGroupOutlines,\n collection-browser.showFacetGroupOutlines {\n --facet-row-border-top: 1px solid red;\n --facet-row-border-bottom: 1px solid blue;\n }\n\n collection-browser {\n /* Same as production */\n max-width: 135rem;\n margin: auto;\n }\n\n #collection-browser-container {\n /* Same as production */\n padding-left: 0.5rem;\n margin-bottom: 2rem;\n }\n\n #base-query-field {\n width: 300px;\n }\n\n .dev-tool-container {\n position: relative;\n }\n #dev-tools {\n position: relative;\n top: 0;\n left: 0;\n z-index: 1;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n padding: 0.5rem 1rem;\n border: 1px solid black;\n font-size: 1.4rem;\n width: 75%;\n background: #ffffffb3;\n }\n\n #dev-tools > * {\n display: flex;\n }\n\n #toggle-dev-tools-btn {\n position: fixed;\n left: 77.4%;\n top: 0;\n background: red;\n padding: 5px;\n color: white;\n font-size: 1.4rem;\n margin: 0;\n z-index: 1;\n cursor: pointer;\n }\n\n #search-and-page-inputs {\n flex-wrap: wrap;\n row-gap: 2px;\n }\n\n #search-and-page-inputs > form {\n margin-right: 1rem;\n }\n\n #search-and-page-inputs label {\n display: inline-block;\n min-width: 50px;\n }\n\n #page-number-input {\n width: 75px;\n }\n\n .search-type {\n margin-right: 1rem;\n }\n\n #cell-controls {\n display: flex;\n flex-wrap: wrap;\n }\n\n #cell-controls label {\n display: inline-block;\n width: 10rem;\n }\n\n #cell-size-control,\n #cell-gap-control {\n flex-basis: calc(50% - 1rem);\n flex-grow: 1;\n }\n\n #cell-gap-control {\n margin-left: 1rem;\n }\n\n #checkbox-controls {\n padding-top: 0.5rem;\n flex-wrap: wrap;\n }\n\n .checkbox-control {\n flex-basis: 50%;\n }\n\n #last-event {\n background-color: aliceblue;\n padding: 5px;\n margin: 5px auto;\n }\n\n .hidden {\n display: none;\n }\n\n #toggle-controls {\n background-color: lightskyblue;\n padding: 5px;\n margin: 5px auto;\n }\n\n #search-types {\n margin: 5px auto;\n background-color: aliceblue;\n font-size: 1.6rem;\n }\n `;\n}\n"]}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
2
2
|
import type { InfiniteScrollerCellProviderInterface } from '@internetarchive/infinite-scroller';
|
|
3
|
-
import {
|
|
3
|
+
import { 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 { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
|
|
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 './tiles/tile-dispatcher
|
|
11
|
-
import './tiles/collection-browser-loading-tile
|
|
12
|
-
import './sort-filter-bar/sort-filter-bar
|
|
13
|
-
import './collection-facets
|
|
14
|
-
import './circular-activity-indicator
|
|
15
|
-
import './sort-filter-bar/sort-filter-bar
|
|
16
|
-
import { SelectedFacets, SortField, CollectionBrowserContext, TileModel, CollectionDisplayMode, FacetEventDetails } from './models
|
|
17
|
-
import { RestorationStateHandlerInterface } from './restoration-state-handler
|
|
18
|
-
import './empty-placeholder
|
|
10
|
+
import './tiles/tile-dispatcher';
|
|
11
|
+
import './tiles/collection-browser-loading-tile';
|
|
12
|
+
import './sort-filter-bar/sort-filter-bar';
|
|
13
|
+
import './collection-facets';
|
|
14
|
+
import './circular-activity-indicator';
|
|
15
|
+
import './sort-filter-bar/sort-filter-bar';
|
|
16
|
+
import { SelectedFacets, SortField, CollectionBrowserContext, TileModel, CollectionDisplayMode, FacetEventDetails } from './models';
|
|
17
|
+
import { RestorationStateHandlerInterface } from './restoration-state-handler';
|
|
18
|
+
import './empty-placeholder';
|
|
19
19
|
export declare class CollectionBrowser extends LitElement implements InfiniteScrollerCellProviderInterface, SharedResizeObserverResizeHandlerInterface {
|
|
20
20
|
baseNavigationUrl?: string;
|
|
21
21
|
baseImageUrl: string;
|
|
@@ -49,9 +49,6 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
49
49
|
* If item management UI active
|
|
50
50
|
*/
|
|
51
51
|
isManageView: boolean;
|
|
52
|
-
prerender: boolean;
|
|
53
|
-
prerenderSearchResults?: SearchResult[];
|
|
54
|
-
totalResults?: number;
|
|
55
52
|
/**
|
|
56
53
|
* The page that the consumer wants to load.
|
|
57
54
|
*/
|
|
@@ -71,6 +68,7 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
71
68
|
private fullYearAggregationLoading;
|
|
72
69
|
private aggregations?;
|
|
73
70
|
private fullYearsHistogramAggregation;
|
|
71
|
+
private totalResults?;
|
|
74
72
|
private queryErrorMessage?;
|
|
75
73
|
private mobileView;
|
|
76
74
|
private mobileFacetsVisible;
|
|
@@ -109,6 +107,13 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
109
107
|
*/
|
|
110
108
|
private dataSource;
|
|
111
109
|
private infiniteScroller;
|
|
110
|
+
private sessionIdGenPromise?;
|
|
111
|
+
/**
|
|
112
|
+
* Returns a promise resolving to a unique string that persists for the current browser session.
|
|
113
|
+
* Used in generating unique IDs for search requests, so that multiple requests coming from the
|
|
114
|
+
* same browser session can be identified.
|
|
115
|
+
*/
|
|
116
|
+
private getSessionId;
|
|
112
117
|
/**
|
|
113
118
|
* Go to the given page of results
|
|
114
119
|
*
|
|
@@ -270,6 +275,23 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
270
275
|
private initialQueryChangeHappened;
|
|
271
276
|
private historyPopOccurred;
|
|
272
277
|
private previousQueryKey?;
|
|
278
|
+
/**
|
|
279
|
+
* Internal property to store the `resolve` function for the most recent
|
|
280
|
+
* `initialSearchComplete` promise, allowing us to resolve it at the appropriate time.
|
|
281
|
+
*/
|
|
282
|
+
private _initialSearchCompleteResolver;
|
|
283
|
+
/**
|
|
284
|
+
* Internal property to store the private value backing the `initialSearchComplete` getter.
|
|
285
|
+
*/
|
|
286
|
+
private _initialSearchCompletePromise;
|
|
287
|
+
/**
|
|
288
|
+
* A Promise which, after each query change, resolves once the fetches for the initial
|
|
289
|
+
* search have completed. Waits for *both* the hits and aggregations fetches to finish.
|
|
290
|
+
*
|
|
291
|
+
* Ensure you await this component's `updateComplete` promise before awaiting this
|
|
292
|
+
* one, to ensure you do not await an obsolete promise from the previous update.
|
|
293
|
+
*/
|
|
294
|
+
get initialSearchComplete(): Promise<boolean>;
|
|
273
295
|
private handleQueryChange;
|
|
274
296
|
private setupStateRestorationObserver;
|
|
275
297
|
private boundNavigationHandler?;
|
|
@@ -278,6 +300,16 @@ export declare class CollectionBrowser extends LitElement implements InfiniteScr
|
|
|
278
300
|
private persistState;
|
|
279
301
|
private doInitialPageFetch;
|
|
280
302
|
private emitSearchResultsLoadingChanged;
|
|
303
|
+
/**
|
|
304
|
+
* Produces a compact unique ID for a search request that can help with debugging
|
|
305
|
+
* on the backend by making related requests easier to trace through different services.
|
|
306
|
+
* (e.g., tying the hits/aggregations requests for the same page back to a single hash).
|
|
307
|
+
*
|
|
308
|
+
* @param params The search service parameters for the request
|
|
309
|
+
* @param kind The kind of request (hits-only, aggregations-only, or both)
|
|
310
|
+
* @returns A Promise resolving to the uid to apply to the request
|
|
311
|
+
*/
|
|
312
|
+
private requestUID;
|
|
281
313
|
/**
|
|
282
314
|
* Constructs a search service FilterMap object from the combination of
|
|
283
315
|
* all the currently-applied filters. This includes any facets, letter
|
|
@@ -5,18 +5,19 @@ import { customElement, property, query, state } from 'lit/decorators.js';
|
|
|
5
5
|
import { classMap } from 'lit/directives/class-map.js';
|
|
6
6
|
import { FilterConstraint, FilterMapBuilder, SearchType, } from '@internetarchive/search-service';
|
|
7
7
|
import '@internetarchive/infinite-scroller';
|
|
8
|
-
import './tiles/tile-dispatcher
|
|
9
|
-
import './tiles/collection-browser-loading-tile
|
|
10
|
-
import './sort-filter-bar/sort-filter-bar
|
|
11
|
-
import './collection-facets
|
|
12
|
-
import './circular-activity-indicator
|
|
13
|
-
import './sort-filter-bar/sort-filter-bar
|
|
14
|
-
import { SortField, SortFieldToMetadataField, getDefaultSelectedFacets, prefixFilterAggregationKeys, } from './models
|
|
15
|
-
import { RestorationStateHandler, } from './restoration-state-handler
|
|
16
|
-
import chevronIcon from './assets/img/icons/chevron
|
|
17
|
-
import './empty-placeholder
|
|
18
|
-
import { analyticsActions, analyticsCategories, } from './utils/analytics-events
|
|
19
|
-
import { srOnlyStyle } from './styles/sr-only
|
|
8
|
+
import './tiles/tile-dispatcher';
|
|
9
|
+
import './tiles/collection-browser-loading-tile';
|
|
10
|
+
import './sort-filter-bar/sort-filter-bar';
|
|
11
|
+
import './collection-facets';
|
|
12
|
+
import './circular-activity-indicator';
|
|
13
|
+
import './sort-filter-bar/sort-filter-bar';
|
|
14
|
+
import { SortField, SortFieldToMetadataField, getDefaultSelectedFacets, prefixFilterAggregationKeys, } from './models';
|
|
15
|
+
import { RestorationStateHandler, } from './restoration-state-handler';
|
|
16
|
+
import chevronIcon from './assets/img/icons/chevron';
|
|
17
|
+
import './empty-placeholder';
|
|
18
|
+
import { analyticsActions, analyticsCategories, } from './utils/analytics-events';
|
|
19
|
+
import { srOnlyStyle } from './styles/sr-only';
|
|
20
|
+
import { sha1 } from './utils/sha1';
|
|
20
21
|
let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
21
22
|
constructor() {
|
|
22
23
|
super(...arguments);
|
|
@@ -42,7 +43,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
42
43
|
* If item management UI active
|
|
43
44
|
*/
|
|
44
45
|
this.isManageView = false;
|
|
45
|
-
this.prerender = false;
|
|
46
46
|
/**
|
|
47
47
|
* The page that the consumer wants to load.
|
|
48
48
|
*/
|
|
@@ -115,6 +115,12 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
115
115
|
// so this keeps track of whether we've already set the initial query
|
|
116
116
|
this.initialQueryChangeHappened = false;
|
|
117
117
|
this.historyPopOccurred = false;
|
|
118
|
+
/**
|
|
119
|
+
* Internal property to store the private value backing the `initialSearchComplete` getter.
|
|
120
|
+
*/
|
|
121
|
+
this._initialSearchCompletePromise = new Promise(res => {
|
|
122
|
+
this._initialSearchCompleteResolver = res;
|
|
123
|
+
});
|
|
118
124
|
// this maps the query to the pages being fetched for that query
|
|
119
125
|
this.pageFetchesInProgress = {};
|
|
120
126
|
}
|
|
@@ -146,6 +152,32 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
146
152
|
get estimatedTileCount() {
|
|
147
153
|
return this.pagesToRender * this.pageSize;
|
|
148
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Returns a promise resolving to a unique string that persists for the current browser session.
|
|
157
|
+
* Used in generating unique IDs for search requests, so that multiple requests coming from the
|
|
158
|
+
* same browser session can be identified.
|
|
159
|
+
*/
|
|
160
|
+
async getSessionId() {
|
|
161
|
+
try {
|
|
162
|
+
const storedSessionId = sessionStorage === null || sessionStorage === void 0 ? void 0 : sessionStorage.getItem('cb-session');
|
|
163
|
+
if (storedSessionId) {
|
|
164
|
+
return storedSessionId;
|
|
165
|
+
}
|
|
166
|
+
// If we enter this method a second time while a first session ID is already being generated,
|
|
167
|
+
// ensure we produce the same ID from both calls instead of generating another one.
|
|
168
|
+
if (this.sessionIdGenPromise) {
|
|
169
|
+
return this.sessionIdGenPromise;
|
|
170
|
+
}
|
|
171
|
+
this.sessionIdGenPromise = sha1(Math.random().toString());
|
|
172
|
+
const newSessionId = await this.sessionIdGenPromise;
|
|
173
|
+
sessionStorage === null || sessionStorage === void 0 ? void 0 : sessionStorage.setItem('cb-session', newSessionId);
|
|
174
|
+
return newSessionId;
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
// Either we can't generate the hash or we're restricted from accessing sessionStorage
|
|
178
|
+
return '';
|
|
179
|
+
}
|
|
180
|
+
}
|
|
149
181
|
/**
|
|
150
182
|
* Go to the given page of results
|
|
151
183
|
*
|
|
@@ -215,12 +247,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
215
247
|
this.selectedCreatorFilter);
|
|
216
248
|
}
|
|
217
249
|
render() {
|
|
218
|
-
var _a;
|
|
219
250
|
this.setPlaceholderType();
|
|
220
|
-
if (this.prerender && this.prerenderSearchResults) {
|
|
221
|
-
this.updateDataSource(1, this.prerenderSearchResults);
|
|
222
|
-
(_a = this.totalResults) !== null && _a !== void 0 ? _a : (this.totalResults = this.prerenderSearchResults.length);
|
|
223
|
-
}
|
|
224
251
|
return html `
|
|
225
252
|
<div
|
|
226
253
|
id="content-container"
|
|
@@ -234,8 +261,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
234
261
|
}
|
|
235
262
|
setPlaceholderType() {
|
|
236
263
|
var _a;
|
|
237
|
-
if (this.prerender && this.prerenderSearchResults)
|
|
238
|
-
return null;
|
|
239
264
|
this.placeholderType = null;
|
|
240
265
|
if (!((_a = this.baseQuery) === null || _a === void 0 ? void 0 : _a.trim())) {
|
|
241
266
|
this.placeholderType = 'empty-query';
|
|
@@ -247,7 +272,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
247
272
|
if (this.queryErrorMessage) {
|
|
248
273
|
this.placeholderType = 'query-error';
|
|
249
274
|
}
|
|
250
|
-
return this.placeholderType;
|
|
251
275
|
}
|
|
252
276
|
get emptyPlaceholderTemplate() {
|
|
253
277
|
var _a;
|
|
@@ -350,14 +374,10 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
350
374
|
`;
|
|
351
375
|
}
|
|
352
376
|
get infiniteScrollerTemplate() {
|
|
353
|
-
let itemCount = this.placeholderType ? 0 : nothing;
|
|
354
|
-
if (this.prerender && this.totalResults)
|
|
355
|
-
itemCount = this.totalResults;
|
|
356
377
|
return html `<infinite-scroller
|
|
357
378
|
class=${this.infiniteScrollerClasses}
|
|
379
|
+
itemCount=${this.placeholderType ? 0 : nothing}
|
|
358
380
|
ariaLandmarkLabel="Search results"
|
|
359
|
-
?prerender=${this.prerender}
|
|
360
|
-
.itemCount=${itemCount}
|
|
361
381
|
.cellProvider=${this}
|
|
362
382
|
.placeholderCellTemplate=${this.placeholderCellTemplate}
|
|
363
383
|
@scrollThresholdReached=${this.scrollThresholdReached}
|
|
@@ -820,6 +840,16 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
820
840
|
});
|
|
821
841
|
this.dispatchEvent(event);
|
|
822
842
|
}
|
|
843
|
+
/**
|
|
844
|
+
* A Promise which, after each query change, resolves once the fetches for the initial
|
|
845
|
+
* search have completed. Waits for *both* the hits and aggregations fetches to finish.
|
|
846
|
+
*
|
|
847
|
+
* Ensure you await this component's `updateComplete` promise before awaiting this
|
|
848
|
+
* one, to ensure you do not await an obsolete promise from the previous update.
|
|
849
|
+
*/
|
|
850
|
+
get initialSearchComplete() {
|
|
851
|
+
return this._initialSearchCompletePromise;
|
|
852
|
+
}
|
|
823
853
|
async handleQueryChange() {
|
|
824
854
|
// only reset if the query has actually changed
|
|
825
855
|
if (!this.searchService || this.pageFetchQueryKey === this.previousQueryKey)
|
|
@@ -852,7 +882,14 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
852
882
|
this.persistState();
|
|
853
883
|
}
|
|
854
884
|
this.historyPopOccurred = false;
|
|
885
|
+
// Reset the `initialSearchComplete` promise with a new value for the imminent search
|
|
886
|
+
this._initialSearchCompletePromise = new Promise(res => {
|
|
887
|
+
this._initialSearchCompleteResolver = res;
|
|
888
|
+
});
|
|
889
|
+
// Fire the initial page and facets requests
|
|
855
890
|
await Promise.all([this.doInitialPageFetch(), this.fetchFacets()]);
|
|
891
|
+
// Resolve the `initialSearchComplete` promise for this search
|
|
892
|
+
this._initialSearchCompleteResolver(true);
|
|
856
893
|
}
|
|
857
894
|
setupStateRestorationObserver() {
|
|
858
895
|
if (this.boundNavigationHandler)
|
|
@@ -917,6 +954,33 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
917
954
|
},
|
|
918
955
|
}));
|
|
919
956
|
}
|
|
957
|
+
/**
|
|
958
|
+
* Produces a compact unique ID for a search request that can help with debugging
|
|
959
|
+
* on the backend by making related requests easier to trace through different services.
|
|
960
|
+
* (e.g., tying the hits/aggregations requests for the same page back to a single hash).
|
|
961
|
+
*
|
|
962
|
+
* @param params The search service parameters for the request
|
|
963
|
+
* @param kind The kind of request (hits-only, aggregations-only, or both)
|
|
964
|
+
* @returns A Promise resolving to the uid to apply to the request
|
|
965
|
+
*/
|
|
966
|
+
async requestUID(params, kind) {
|
|
967
|
+
var _a;
|
|
968
|
+
const paramsToHash = JSON.stringify({
|
|
969
|
+
pageType: params.pageType,
|
|
970
|
+
pageTarget: params.pageTarget,
|
|
971
|
+
query: params.query,
|
|
972
|
+
fields: params.fields,
|
|
973
|
+
filters: params.filters,
|
|
974
|
+
sort: params.sort,
|
|
975
|
+
searchType: this.searchType,
|
|
976
|
+
});
|
|
977
|
+
const fullQueryHash = (await sha1(paramsToHash)).slice(0, 20); // First 80 bits of SHA-1 are plenty for this
|
|
978
|
+
const sessionId = (await this.getSessionId()).slice(0, 20); // Likewise
|
|
979
|
+
const page = (_a = params.page) !== null && _a !== void 0 ? _a : 0;
|
|
980
|
+
const kindPrefix = kind.charAt(0); // f = full, h = hits, a = aggregations
|
|
981
|
+
const currentTime = Date.now();
|
|
982
|
+
return `R:${fullQueryHash}-S:${sessionId}-P:${page}-K:${kindPrefix}-T:${currentTime}`;
|
|
983
|
+
}
|
|
920
984
|
/**
|
|
921
985
|
* Constructs a search service FilterMap object from the combination of
|
|
922
986
|
* all the currently-applied filters. This includes any facets, letter
|
|
@@ -1076,6 +1140,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
1076
1140
|
if (!this.searchService)
|
|
1077
1141
|
return;
|
|
1078
1142
|
const { facetFetchQueryKey } = this;
|
|
1143
|
+
const sortParams = this.sortParam ? [this.sortParam] : [];
|
|
1079
1144
|
const params = {
|
|
1080
1145
|
query: trimmedQuery,
|
|
1081
1146
|
rows: 0,
|
|
@@ -1084,8 +1149,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
1084
1149
|
aggregationsSize: 10,
|
|
1085
1150
|
// Note: we don't need an aggregations param to fetch the default aggregations from the PPS.
|
|
1086
1151
|
// The default aggregations for the search_results page type should be what we need here.
|
|
1087
|
-
uid: this.facetFetchQueryKey,
|
|
1088
1152
|
};
|
|
1153
|
+
params.uid = await this.requestUID({ ...params, sort: sortParams }, 'aggregations');
|
|
1089
1154
|
this.facetsLoading = true;
|
|
1090
1155
|
const searchResponse = await this.searchService.search(params, this.searchType);
|
|
1091
1156
|
const success = searchResponse === null || searchResponse === void 0 ? void 0 : searchResponse.success;
|
|
@@ -1205,8 +1270,8 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
1205
1270
|
sort: sortParams,
|
|
1206
1271
|
filters: this.filterMap,
|
|
1207
1272
|
aggregations: { omit: true },
|
|
1208
|
-
uid: this.pageFetchQueryKey,
|
|
1209
1273
|
};
|
|
1274
|
+
params.uid = await this.requestUID(params, 'hits');
|
|
1210
1275
|
const searchResponse = await this.searchService.search(params, this.searchType);
|
|
1211
1276
|
const success = searchResponse === null || searchResponse === void 0 ? void 0 : searchResponse.success;
|
|
1212
1277
|
// This is checking to see if the query has changed since the data was fetched.
|
|
@@ -1364,6 +1429,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
1364
1429
|
if (!trimmedQuery)
|
|
1365
1430
|
return [];
|
|
1366
1431
|
const filterAggregationKey = prefixFilterAggregationKeys[filterType];
|
|
1432
|
+
const sortParams = this.sortParam ? [this.sortParam] : [];
|
|
1367
1433
|
const params = {
|
|
1368
1434
|
query: trimmedQuery,
|
|
1369
1435
|
rows: 0,
|
|
@@ -1373,6 +1439,7 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
1373
1439
|
// Fetch all 26 letter buckets
|
|
1374
1440
|
aggregationsSize: 26,
|
|
1375
1441
|
};
|
|
1442
|
+
params.uid = await this.requestUID({ ...params, sort: sortParams }, 'aggregations');
|
|
1376
1443
|
const searchResponse = await ((_b = this.searchService) === null || _b === void 0 ? void 0 : _b.search(params, this.searchType));
|
|
1377
1444
|
return ((_g = (_f = (_e = (_d = (_c = searchResponse === null || searchResponse === void 0 ? void 0 : searchResponse.success) === null || _c === void 0 ? void 0 : _c.response) === null || _d === void 0 ? void 0 : _d.aggregations) === null || _e === void 0 ? void 0 : _e[filterAggregationKey]) === null || _f === void 0 ? void 0 : _f.buckets) !== null && _g !== void 0 ? _g : []);
|
|
1378
1445
|
}
|
|
@@ -1439,7 +1506,6 @@ let CollectionBrowser = class CollectionBrowser extends LitElement {
|
|
|
1439
1506
|
return undefined;
|
|
1440
1507
|
return html `
|
|
1441
1508
|
<tile-dispatcher
|
|
1442
|
-
?prerender=${this.prerender}
|
|
1443
1509
|
.baseNavigationUrl=${this.baseNavigationUrl}
|
|
1444
1510
|
.baseImageUrl=${this.baseImageUrl}
|
|
1445
1511
|
.model=${model}
|
|
@@ -1921,15 +1987,6 @@ __decorate([
|
|
|
1921
1987
|
__decorate([
|
|
1922
1988
|
property({ type: Boolean })
|
|
1923
1989
|
], CollectionBrowser.prototype, "isManageView", void 0);
|
|
1924
|
-
__decorate([
|
|
1925
|
-
property({ type: Boolean })
|
|
1926
|
-
], CollectionBrowser.prototype, "prerender", void 0);
|
|
1927
|
-
__decorate([
|
|
1928
|
-
property({ type: Object })
|
|
1929
|
-
], CollectionBrowser.prototype, "prerenderSearchResults", void 0);
|
|
1930
|
-
__decorate([
|
|
1931
|
-
property({ type: Number })
|
|
1932
|
-
], CollectionBrowser.prototype, "totalResults", void 0);
|
|
1933
1990
|
__decorate([
|
|
1934
1991
|
state()
|
|
1935
1992
|
], CollectionBrowser.prototype, "pagesToRender", void 0);
|
|
@@ -1948,6 +2005,9 @@ __decorate([
|
|
|
1948
2005
|
__decorate([
|
|
1949
2006
|
state()
|
|
1950
2007
|
], CollectionBrowser.prototype, "fullYearsHistogramAggregation", void 0);
|
|
2008
|
+
__decorate([
|
|
2009
|
+
state()
|
|
2010
|
+
], CollectionBrowser.prototype, "totalResults", void 0);
|
|
1951
2011
|
__decorate([
|
|
1952
2012
|
state()
|
|
1953
2013
|
], CollectionBrowser.prototype, "queryErrorMessage", void 0);
|