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

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 (36) hide show
  1. package/dist/src/app-root.d.ts +1 -0
  2. package/dist/src/app-root.js +38 -0
  3. package/dist/src/app-root.js.map +1 -1
  4. package/dist/src/collection-browser.d.ts +14 -6
  5. package/dist/src/collection-browser.js +27 -20
  6. package/dist/src/collection-browser.js.map +1 -1
  7. package/dist/src/data-source/collection-browser-data-source.d.ts +24 -3
  8. package/dist/src/data-source/collection-browser-data-source.js +77 -55
  9. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  10. package/dist/src/data-source/models.d.ts +1 -0
  11. package/dist/src/data-source/models.js.map +1 -1
  12. package/dist/src/sort-filter-bar/sort-filter-bar.js +24 -16
  13. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  14. package/dist/src/tiles/list/tile-list-compact.js +1 -1
  15. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  16. package/dist/test/collection-browser.test.js +5 -1
  17. package/dist/test/collection-browser.test.js.map +1 -1
  18. package/dist/test/collection-facets.test.js +5 -0
  19. package/dist/test/collection-facets.test.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/app-root.ts +39 -0
  22. package/src/collection-browser.ts +39 -21
  23. package/src/data-source/collection-browser-data-source.ts +59 -10
  24. package/src/data-source/models.ts +1 -0
  25. package/src/sort-filter-bar/sort-filter-bar.ts +25 -16
  26. package/src/tiles/list/tile-list-compact.ts +1 -1
  27. package/test/collection-browser.test.ts +5 -1
  28. package/test/collection-facets.test.ts +5 -0
  29. package/dist/src/data-source/data-source-fetch-provider.d.ts +0 -13
  30. package/dist/src/data-source/data-source-fetch-provider.js +0 -61
  31. package/dist/src/data-source/data-source-fetch-provider.js.map +0 -1
  32. package/dist/src/selected-facets.d.ts +0 -67
  33. package/dist/src/selected-facets.js +0 -149
  34. package/dist/src/selected-facets.js.map +0 -1
  35. package/src/data-source/data-source-fetch-provider.ts +0 -79
  36. package/src/selected-facets.ts +0 -216
@@ -1 +1 @@
1
- {"version":3,"file":"collection-facets.test.js","sourceRoot":"","sources":["../../test/collection-facets.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport { Aggregation } from '@internetarchive/search-service';\nimport {\n ModalManager,\n ModalManagerInterface,\n} from '@internetarchive/modal-manager';\nimport type { CollectionFacets } from '../src/collection-facets';\nimport '@internetarchive/modal-manager';\nimport '../src/collection-facets';\nimport {\n FacetOption,\n SelectedFacets,\n getDefaultSelectedFacets,\n} from '../src/models';\nimport { MockAnalyticsHandler } from './mocks/mock-analytics-handler';\nimport type { FacetRow } from '../src/collection-facets/facet-row';\nimport type { FacetsTemplate } from '../src/collection-facets/facets-template';\n\ndescribe('Collection Facets', () => {\n it('has loader', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets ?facetsLoading=${true}></collection-facets>`\n );\n\n expect(\n el.shadowRoot?.querySelector('#container')?.classList.contains('loading')\n ).to.be.true;\n\n el.facetsLoading = false;\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('#container')?.classList.contains('loading')\n ).to.be.false;\n });\n\n it('renders a date picker loading placeholder when date picker enabled', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = true;\n el.showHistogramDatePicker = true;\n await el.updateComplete;\n\n const histogramLoader = el.shadowRoot?.querySelector(\n '.histogram-loading-indicator'\n );\n expect(histogramLoader).to.exist;\n });\n\n it('does not render a date picker loading placeholder when date picker disabled', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = true;\n el.showHistogramDatePicker = false;\n await el.updateComplete;\n\n const histogramLoader = el.shadowRoot?.querySelector(\n '.histogram-loading-indicator'\n );\n expect(histogramLoader).to.be.null;\n });\n\n it('renders the date picker when enabled with data present', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const histogram = el.shadowRoot?.querySelector('histogram-date-range');\n expect(histogram).to.exist;\n });\n\n it('does not render the date picker when disabled', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = false;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const histogram = el.shadowRoot?.querySelector('histogram-date-range');\n expect(histogram).to.be.null;\n });\n\n it('renders button to expand the date picker when allowed', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector('.expand-date-picker-btn');\n expect(expandBtn).to.exist;\n });\n\n it('does not render button to expand the date picker when disallowed', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = false;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector('.expand-date-picker-btn');\n expect(expandBtn).to.be.null;\n });\n\n it('opens modal when date picker expand button clicked', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .modalManager=${new ModalManager()}\n ></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector(\n '.expand-date-picker-btn'\n ) as HTMLButtonElement;\n expect(expandBtn).to.exist;\n\n const showModalSpy = sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal'\n );\n\n // Click the expand button to open the modal\n expandBtn?.click();\n await el.updateComplete;\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('expanded-date-picker')).to.be\n .true;\n });\n\n it('renders aggregations as facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(1);\n\n const titleFacetGroup = facetGroups?.[0];\n const facetGroupHeader = titleFacetGroup?.querySelector('h3');\n // Every facet group header has an invisible \" filters\" suffix for screen-readers\n expect(\n facetGroupHeader?.querySelector('span.sr-only')?.textContent?.trim()\n ).to.equal('filters');\n // Ignoring the screen-reader suffix, we should be left with only the readable, capitalized title\n expect(\n facetGroupHeader?.textContent?.trim().replace(/\\s*filters$/, '')\n ).to.equal('Subject');\n\n const titleFacetRow = titleFacetGroup\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelector('facet-row') as FacetRow;\n await titleFacetRow.updateComplete;\n\n expect(titleFacetRow?.shadowRoot?.textContent?.trim()).to.satisfy(\n (text: string) => /^foo\\s*5$/.test(text)\n );\n });\n\n it('renders multiple aggregation types', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n mediatype: new Aggregation({\n buckets: [\n {\n key: 'bar',\n doc_count: 10,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(2);\n });\n\n it('does not render suppressed collection facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n collection: new Aggregation({\n buckets: [\n {\n key: 'deemphasize',\n doc_count: 5,\n },\n {\n key: 'community',\n doc_count: 5,\n },\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const collectionFacets = el.shadowRoot\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelectorAll('facet-row') as ArrayLike<FacetRow>;\n expect(collectionFacets?.length).to.equal(1);\n\n // The first (and only) collection link should be for 'foo'\n expect(collectionFacets[0].bucket?.key).to.equal('foo');\n });\n\n it('renders lending facets with human-readable names', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n lending: new Aggregation({\n buckets: [\n {\n key: 'is_lendable',\n doc_count: 3,\n },\n {\n key: 'available_to_borrow',\n doc_count: 2,\n },\n {\n key: 'is_readable',\n doc_count: 1,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template'\n ) as FacetsTemplate;\n await facetsTemplate?.updateComplete;\n\n const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(lendingFacets?.length).to.equal(3);\n\n expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(\n /^Lending Library\\s*3$/\n );\n expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(\n /^Borrow 14 Days\\s*2$/\n );\n expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(\n /^Always Available\\s*1$/\n );\n });\n\n it('renders selected/negative lending facets with human-readable names', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const selectedFacets: SelectedFacets = {\n subject: {},\n lending: {\n is_lendable: {\n key: 'is_lendable',\n count: 5,\n state: 'selected',\n },\n available_to_borrow: {\n key: 'available_to_borrow',\n count: 4,\n state: 'selected',\n },\n is_readable: {\n key: 'is_readable',\n count: 3,\n state: 'hidden',\n },\n },\n mediatype: {},\n language: {},\n creator: {},\n collection: {},\n year: {},\n };\n\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template'\n ) as FacetsTemplate;\n await facetsTemplate?.updateComplete;\n\n const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(lendingFacets?.length).to.equal(3);\n\n expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(\n /^Lending Library\\s*5$/\n );\n expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(\n /^Borrow 14 Days\\s*4$/\n );\n expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(\n /^Always Available\\s*3$/\n );\n });\n\n it('only renders lending facets for is_lendable, available_to_borrow, and is_readable', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n lending: new Aggregation({\n buckets: [\n {\n key: 'is_lendable',\n doc_count: 5,\n },\n {\n key: 'is_borrowable',\n doc_count: 4,\n },\n {\n key: 'available_to_borrow',\n doc_count: 5,\n },\n {\n key: 'is_browsable',\n doc_count: 4,\n },\n {\n key: 'available_to_browse',\n doc_count: 5,\n },\n {\n key: 'is_readable',\n doc_count: 4,\n },\n {\n key: 'available_to_waitlist',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template'\n ) as FacetsTemplate;\n await facetsTemplate?.updateComplete;\n await new Promise(res => {\n setTimeout(res, 100);\n });\n\n const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(lendingFacets?.length).to.equal(3);\n\n expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(\n /^Lending Library\\s*5$/\n );\n expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(\n /^Borrow 14 Days\\s*5$/\n );\n expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(\n /^Always Available\\s*4$/\n );\n });\n\n it('does not render a More... link for lending facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n lending: new Aggregation({\n buckets: [\n {\n key: 'is_lendable',\n doc_count: 5,\n },\n {\n key: 'is_borrowable',\n doc_count: 4,\n },\n {\n key: 'available_to_borrow',\n doc_count: 5,\n },\n {\n key: 'is_browsable',\n doc_count: 4,\n },\n {\n key: 'available_to_browse',\n doc_count: 5,\n },\n {\n key: 'is_readable',\n doc_count: 4,\n },\n {\n key: 'available_to_waitlist',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector('.more-link');\n expect(moreLink).not.to.exist;\n });\n\n it('always renders the mediatype:collection facet when present', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n mediatype: new Aggregation({\n buckets: [\n {\n key: 'texts',\n doc_count: 10000,\n },\n {\n key: 'image',\n doc_count: 9000,\n },\n {\n key: 'audio',\n doc_count: 8000,\n },\n {\n key: 'movies',\n doc_count: 7000,\n },\n {\n key: 'software',\n doc_count: 6000,\n },\n {\n key: 'data',\n doc_count: 5000,\n },\n {\n key: 'etree',\n doc_count: 4000,\n },\n {\n key: 'collection',\n doc_count: 1,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector('facets-template');\n const facetRows = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(facetRows?.length).to.equal(6);\n expect(facetRows?.[5]?.bucket?.key).to.equal('collection');\n });\n\n it('renders the mediatype:collection facet even when >=6 other mediatypes are selected', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n mediatype: new Aggregation({\n buckets: [\n {\n key: 'texts',\n doc_count: 10000,\n },\n {\n key: 'image',\n doc_count: 9000,\n },\n {\n key: 'audio',\n doc_count: 8000,\n },\n {\n key: 'movies',\n doc_count: 7000,\n },\n {\n key: 'software',\n doc_count: 6000,\n },\n {\n key: 'data',\n doc_count: 5000,\n },\n {\n key: 'etree',\n doc_count: 4000,\n },\n {\n key: 'collection',\n doc_count: 1,\n },\n ],\n }),\n };\n\n const selectedFacets = getDefaultSelectedFacets();\n selectedFacets.mediatype = {\n texts: { key: 'texts', count: 10000, state: 'selected' },\n image: { key: 'image', count: 9000, state: 'selected' },\n audio: { key: 'audio', count: 8000, state: 'selected' },\n movies: { key: 'movies', count: 7000, state: 'selected' },\n software: { key: 'software', count: 6000, state: 'selected' },\n data: { key: 'data', count: 5000, state: 'selected' },\n etree: { key: 'etree', count: 4000, state: 'selected' },\n };\n\n el.aggregations = aggs;\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector('facets-template');\n const facetRows = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(facetRows?.length).to.equal(8);\n expect(facetRows?.[7]?.bucket?.key).to.equal('collection');\n });\n\n describe('More Facets', () => {\n it('Does not render < allowedFacetCount', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector('.more-link');\n expect(moreLink).to.be.null;\n });\n\n it('Render More Facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .modalManager=${new ModalManager()}\n ></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n {\n key: 'fi',\n doc_count: 5,\n },\n {\n key: 'fum',\n doc_count: 5,\n },\n {\n key: 'flee',\n doc_count: 5,\n },\n {\n key: 'wheee',\n doc_count: 5,\n },\n {\n key: 'whooo',\n doc_count: 5,\n },\n {\n key: 'boop',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n let eventCaught = false;\n let eventFacet = '';\n el.addEventListener('showMoreFacets', e => {\n eventFacet = (e as CustomEvent).detail;\n eventCaught = true;\n });\n\n const moreLink = el.shadowRoot?.querySelector(\n '.more-link'\n ) as HTMLButtonElement;\n expect(moreLink).to.exist; // has link\n\n const showModalSpy = sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal'\n );\n // let's pop up modal\n moreLink?.click();\n await el.updateComplete;\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('more-search-facets')).to.be\n .true;\n expect(eventCaught).to.be.true;\n expect(eventFacet).to.equal('subject' as FacetOption);\n });\n });\n\n it('fire analytics on more link', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .analyticsHandler=${mockAnalyticsHandler}\n ></collection-facets>`\n );\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n {\n key: 'fi',\n doc_count: 5,\n },\n {\n key: 'fum',\n doc_count: 5,\n },\n {\n key: 'flee',\n doc_count: 5,\n },\n {\n key: 'wheee',\n doc_count: 5,\n },\n {\n key: 'whooo',\n doc_count: 5,\n },\n {\n key: 'boop',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector(\n '.more-link'\n ) as HTMLButtonElement;\n\n expect(moreLink).to.exist; // has link\n\n moreLink?.click();\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('showMoreFacetsModal');\n expect(mockAnalyticsHandler.callLabel).to.equal('subject');\n });\n\n it('includes Part Of section for collections', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .baseNavigationUrl=${''}\n .withinCollection=${'foo'}\n .parentCollections=${['bar', 'baz']}\n ></collection-facets>`\n );\n\n const partOfSection = el.shadowRoot?.querySelector('.partof-collections');\n expect(partOfSection).to.exist;\n\n const partOfLinks = partOfSection?.querySelectorAll('a[href]');\n expect(partOfLinks?.length).to.equal(2);\n\n expect(partOfLinks?.[0]?.textContent?.trim()).to.equal('bar-name');\n expect(partOfLinks?.[0]?.getAttribute('href')).to.equal('/details/bar');\n expect(partOfLinks?.[1]?.textContent?.trim()).to.equal('baz-name');\n expect(partOfLinks?.[1]?.getAttribute('href')).to.equal('/details/baz');\n });\n\n it('does not include Part Of section outside of collections', async () => {\n // No withinCollection prop\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .parentCollections=${['bar', 'baz']}\n ></collection-facets>`\n );\n\n const partOfSection = el.shadowRoot?.querySelector('.partof-collections');\n expect(partOfSection).not.to.exist;\n });\n\n it('fires analytics on expanding date picker', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .analyticsHandler=${mockAnalyticsHandler}\n ></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector(\n '.expand-date-picker-btn'\n ) as HTMLButtonElement;\n expect(expandBtn).to.exist;\n\n // Click the expand button to open the modal\n expandBtn?.click();\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('histogramExpanded');\n expect(mockAnalyticsHandler.callLabel).to.equal(window.location.href);\n });\n\n it('fires analytics on clicking Part Of collection link', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .baseNavigationUrl=${''}\n .withinCollection=${'foo'}\n .parentCollections=${['bar']}\n .analyticsHandler=${mockAnalyticsHandler}\n ></collection-facets>`\n );\n\n const partOfLinks = el.shadowRoot?.querySelectorAll(\n '.partof-collections a[href]'\n );\n expect(partOfLinks?.length).to.equal(1);\n\n // Click the expand button to open the modal\n const link = partOfLinks?.[0] as HTMLAnchorElement;\n link?.addEventListener('click', e => e.preventDefault());\n link?.click();\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('partOfCollectionClicked');\n expect(mockAnalyticsHandler.callLabel).to.equal('bar');\n });\n});\n"]}
1
+ {"version":3,"file":"collection-facets.test.js","sourceRoot":"","sources":["../../test/collection-facets.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport sinon from 'sinon';\nimport { html } from 'lit';\nimport { Aggregation } from '@internetarchive/search-service';\nimport {\n ModalManager,\n ModalManagerInterface,\n} from '@internetarchive/modal-manager';\nimport type { CollectionFacets } from '../src/collection-facets';\nimport '@internetarchive/modal-manager';\nimport '../src/collection-facets';\nimport {\n FacetOption,\n SelectedFacets,\n getDefaultSelectedFacets,\n} from '../src/models';\nimport { MockAnalyticsHandler } from './mocks/mock-analytics-handler';\nimport type { FacetRow } from '../src/collection-facets/facet-row';\nimport type { FacetsTemplate } from '../src/collection-facets/facets-template';\n\ndescribe('Collection Facets', () => {\n it('has loader', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets ?facetsLoading=${true}></collection-facets>`\n );\n\n expect(\n el.shadowRoot?.querySelector('#container')?.classList.contains('loading')\n ).to.be.true;\n\n el.facetsLoading = false;\n await el.updateComplete;\n\n expect(\n el.shadowRoot?.querySelector('#container')?.classList.contains('loading')\n ).to.be.false;\n });\n\n it('renders a date picker loading placeholder when date picker enabled', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = true;\n el.showHistogramDatePicker = true;\n await el.updateComplete;\n\n const histogramLoader = el.shadowRoot?.querySelector(\n '.histogram-loading-indicator'\n );\n expect(histogramLoader).to.exist;\n });\n\n it('does not render a date picker loading placeholder when date picker disabled', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = true;\n el.showHistogramDatePicker = false;\n await el.updateComplete;\n\n const histogramLoader = el.shadowRoot?.querySelector(\n '.histogram-loading-indicator'\n );\n expect(histogramLoader).to.be.null;\n });\n\n it('renders the date picker when enabled with data present', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const histogram = el.shadowRoot?.querySelector('histogram-date-range');\n expect(histogram).to.exist;\n });\n\n it('does not render the date picker when disabled', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = false;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const histogram = el.shadowRoot?.querySelector('histogram-date-range');\n expect(histogram).to.be.null;\n });\n\n it('renders button to expand the date picker when allowed', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector('.expand-date-picker-btn');\n expect(expandBtn).to.exist;\n });\n\n it('does not render button to expand the date picker when disallowed', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = false;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector('.expand-date-picker-btn');\n expect(expandBtn).to.be.null;\n });\n\n it('opens modal when date picker expand button clicked', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .modalManager=${new ModalManager()}\n ></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector(\n '.expand-date-picker-btn'\n ) as HTMLButtonElement;\n expect(expandBtn).to.exist;\n\n const showModalSpy = sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal'\n );\n\n // Click the expand button to open the modal\n expandBtn?.click();\n await el.updateComplete;\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('expanded-date-picker')).to.be\n .true;\n });\n\n it('renders aggregations as facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(1);\n\n const titleFacetGroup = facetGroups?.[0];\n const facetGroupHeader = titleFacetGroup?.querySelector('h3');\n // Every facet group header has an invisible \" filters\" suffix for screen-readers\n expect(\n facetGroupHeader?.querySelector('span.sr-only')?.textContent?.trim()\n ).to.equal('filters');\n // Ignoring the screen-reader suffix, we should be left with only the readable, capitalized title\n expect(\n facetGroupHeader?.textContent?.trim().replace(/\\s*filters$/, '')\n ).to.equal('Subject');\n\n const titleFacetRow = titleFacetGroup\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelector('facet-row') as FacetRow;\n await titleFacetRow.updateComplete;\n\n expect(titleFacetRow?.shadowRoot?.textContent?.trim()).to.satisfy(\n (text: string) => /^foo\\s*5$/.test(text)\n );\n });\n\n it('renders multiple aggregation types', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n mediatype: new Aggregation({\n buckets: [\n {\n key: 'bar',\n doc_count: 10,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');\n expect(facetGroups?.length).to.equal(2);\n });\n\n it('does not render suppressed collection facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n collection: new Aggregation({\n buckets: [\n {\n key: 'deemphasize',\n doc_count: 5,\n },\n {\n key: 'community',\n doc_count: 5,\n },\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const collectionFacets = el.shadowRoot\n ?.querySelector('facets-template')\n ?.shadowRoot?.querySelectorAll('facet-row') as ArrayLike<FacetRow>;\n expect(collectionFacets?.length).to.equal(1);\n\n // The first (and only) collection link should be for 'foo'\n expect(collectionFacets[0].bucket?.key).to.equal('foo');\n });\n\n it('renders lending facets with human-readable names', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n lending: new Aggregation({\n buckets: [\n {\n key: 'is_lendable',\n doc_count: 3,\n },\n {\n key: 'available_to_borrow',\n doc_count: 2,\n },\n {\n key: 'is_readable',\n doc_count: 1,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template'\n ) as FacetsTemplate;\n await facetsTemplate?.updateComplete;\n\n const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(lendingFacets?.length).to.equal(3);\n\n expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(\n /^Lending Library\\s*3$/\n );\n expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(\n /^Borrow 14 Days\\s*2$/\n );\n expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(\n /^Always Available\\s*1$/\n );\n });\n\n it('renders selected/negative lending facets with human-readable names', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const selectedFacets: SelectedFacets = {\n subject: {},\n lending: {\n is_lendable: {\n key: 'is_lendable',\n count: 5,\n state: 'selected',\n },\n available_to_borrow: {\n key: 'available_to_borrow',\n count: 4,\n state: 'selected',\n },\n is_readable: {\n key: 'is_readable',\n count: 3,\n state: 'hidden',\n },\n },\n mediatype: {},\n language: {},\n creator: {},\n collection: {},\n year: {},\n };\n\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template'\n ) as FacetsTemplate;\n await facetsTemplate?.updateComplete;\n\n const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(lendingFacets?.length).to.equal(3);\n\n expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(\n /^Lending Library\\s*5$/\n );\n expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(\n /^Borrow 14 Days\\s*4$/\n );\n expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(\n /^Always Available\\s*3$/\n );\n });\n\n it('only renders lending facets for is_lendable, available_to_borrow, and is_readable', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n lending: new Aggregation({\n buckets: [\n {\n key: 'is_lendable',\n doc_count: 5,\n },\n {\n key: 'is_borrowable',\n doc_count: 4,\n },\n {\n key: 'available_to_borrow',\n doc_count: 5,\n },\n {\n key: 'is_browsable',\n doc_count: 4,\n },\n {\n key: 'available_to_browse',\n doc_count: 5,\n },\n {\n key: 'is_readable',\n doc_count: 4,\n },\n {\n key: 'available_to_waitlist',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template'\n ) as FacetsTemplate;\n await facetsTemplate?.updateComplete;\n await new Promise(res => {\n setTimeout(res, 100);\n });\n\n const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(lendingFacets?.length).to.equal(3);\n\n expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(\n /^Lending Library\\s*5$/\n );\n expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(\n /^Borrow 14 Days\\s*5$/\n );\n expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(\n /^Always Available\\s*4$/\n );\n });\n\n it('does not render a More... link for lending facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n lending: new Aggregation({\n buckets: [\n {\n key: 'is_lendable',\n doc_count: 5,\n },\n {\n key: 'is_borrowable',\n doc_count: 4,\n },\n {\n key: 'available_to_borrow',\n doc_count: 5,\n },\n {\n key: 'is_browsable',\n doc_count: 4,\n },\n {\n key: 'available_to_browse',\n doc_count: 5,\n },\n {\n key: 'is_readable',\n doc_count: 4,\n },\n {\n key: 'available_to_waitlist',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector('.more-link');\n expect(moreLink).not.to.exist;\n });\n\n it('always renders the mediatype:collection facet when present', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n mediatype: new Aggregation({\n buckets: [\n {\n key: 'texts',\n doc_count: 10000,\n },\n {\n key: 'image',\n doc_count: 9000,\n },\n {\n key: 'audio',\n doc_count: 8000,\n },\n {\n key: 'movies',\n doc_count: 7000,\n },\n {\n key: 'software',\n doc_count: 6000,\n },\n {\n key: 'data',\n doc_count: 5000,\n },\n {\n key: 'etree',\n doc_count: 4000,\n },\n {\n key: 'collection',\n doc_count: 1,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector('facets-template');\n const facetRows = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(facetRows?.length).to.equal(6);\n expect(facetRows?.[5]?.bucket?.key).to.equal('collection');\n });\n\n it('renders the mediatype:collection facet even when >=6 other mediatypes are selected', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n mediatype: new Aggregation({\n buckets: [\n {\n key: 'texts',\n doc_count: 10000,\n },\n {\n key: 'image',\n doc_count: 9000,\n },\n {\n key: 'audio',\n doc_count: 8000,\n },\n {\n key: 'movies',\n doc_count: 7000,\n },\n {\n key: 'software',\n doc_count: 6000,\n },\n {\n key: 'data',\n doc_count: 5000,\n },\n {\n key: 'etree',\n doc_count: 4000,\n },\n {\n key: 'collection',\n doc_count: 1,\n },\n ],\n }),\n };\n\n const selectedFacets = getDefaultSelectedFacets();\n selectedFacets.mediatype = {\n texts: { key: 'texts', count: 10000, state: 'selected' },\n image: { key: 'image', count: 9000, state: 'selected' },\n audio: { key: 'audio', count: 8000, state: 'selected' },\n movies: { key: 'movies', count: 7000, state: 'selected' },\n software: { key: 'software', count: 6000, state: 'selected' },\n data: { key: 'data', count: 5000, state: 'selected' },\n etree: { key: 'etree', count: 4000, state: 'selected' },\n };\n\n el.aggregations = aggs;\n el.selectedFacets = selectedFacets;\n await el.updateComplete;\n\n const facetsTemplate = el.shadowRoot?.querySelector('facets-template');\n const facetRows = facetsTemplate?.shadowRoot?.querySelectorAll(\n 'facet-row'\n ) as ArrayLike<FacetRow>;\n expect(facetRows?.length).to.equal(8);\n expect(facetRows?.[7]?.bucket?.key).to.equal('collection');\n });\n\n describe('More Facets', () => {\n it('Does not render < allowedFacetCount', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector('.more-link');\n expect(moreLink).to.be.null;\n });\n\n it('Render More Facets', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .modalManager=${new ModalManager()}\n ></collection-facets>`\n );\n\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n {\n key: 'fi',\n doc_count: 5,\n },\n {\n key: 'fum',\n doc_count: 5,\n },\n {\n key: 'flee',\n doc_count: 5,\n },\n {\n key: 'wheee',\n doc_count: 5,\n },\n {\n key: 'whooo',\n doc_count: 5,\n },\n {\n key: 'boop',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n let eventCaught = false;\n let eventFacet = '';\n el.addEventListener('showMoreFacets', e => {\n eventFacet = (e as CustomEvent).detail;\n eventCaught = true;\n });\n\n const moreLink = el.shadowRoot?.querySelector(\n '.more-link'\n ) as HTMLButtonElement;\n expect(moreLink).to.exist; // has link\n\n const showModalSpy = sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal'\n );\n // let's pop up modal\n moreLink?.click();\n await el.updateComplete;\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('more-search-facets')).to.be\n .true;\n expect(eventCaught).to.be.true;\n expect(eventFacet).to.equal('subject' as FacetOption);\n });\n });\n\n it('fire analytics on more link', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .analyticsHandler=${mockAnalyticsHandler}\n ></collection-facets>`\n );\n const aggs: Record<string, Aggregation> = {\n subject: new Aggregation({\n buckets: [\n {\n key: 'foo',\n doc_count: 5,\n },\n {\n key: 'fi',\n doc_count: 5,\n },\n {\n key: 'fum',\n doc_count: 5,\n },\n {\n key: 'flee',\n doc_count: 5,\n },\n {\n key: 'wheee',\n doc_count: 5,\n },\n {\n key: 'whooo',\n doc_count: 5,\n },\n {\n key: 'boop',\n doc_count: 5,\n },\n ],\n }),\n };\n\n el.aggregations = aggs;\n await el.updateComplete;\n\n const moreLink = el.shadowRoot?.querySelector(\n '.more-link'\n ) as HTMLButtonElement;\n\n expect(moreLink).to.exist; // has link\n\n moreLink?.click();\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('showMoreFacetsModal');\n expect(mockAnalyticsHandler.callLabel).to.equal('subject');\n });\n\n it('includes Part Of section for collections', async () => {\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .baseNavigationUrl=${''}\n .withinCollection=${'foo'}\n .parentCollections=${['bar', 'baz']}\n .collectionTitles=${new Map([\n ['foo', 'foo-name'],\n ['bar', 'bar-name'],\n ['baz', 'baz-name'],\n ])}\n ></collection-facets>`\n );\n\n const partOfSection = el.shadowRoot?.querySelector('.partof-collections');\n expect(partOfSection).to.exist;\n\n const partOfLinks = partOfSection?.querySelectorAll('a[href]');\n expect(partOfLinks?.length).to.equal(2);\n\n expect(partOfLinks?.[0]?.textContent?.trim()).to.equal('bar-name');\n expect(partOfLinks?.[0]?.getAttribute('href')).to.equal('/details/bar');\n expect(partOfLinks?.[1]?.textContent?.trim()).to.equal('baz-name');\n expect(partOfLinks?.[1]?.getAttribute('href')).to.equal('/details/baz');\n });\n\n it('does not include Part Of section outside of collections', async () => {\n // No withinCollection prop\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .parentCollections=${['bar', 'baz']}\n ></collection-facets>`\n );\n\n const partOfSection = el.shadowRoot?.querySelector('.partof-collections');\n expect(partOfSection).not.to.exist;\n });\n\n it('fires analytics on expanding date picker', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .analyticsHandler=${mockAnalyticsHandler}\n ></collection-facets>`\n );\n\n el.fullYearAggregationLoading = false;\n el.showHistogramDatePicker = true;\n el.allowExpandingDatePicker = true;\n el.fullYearsHistogramAggregation = new Aggregation({\n buckets: [1, 2, 3],\n first_bucket_key: 0,\n last_bucket_key: 2,\n });\n await el.updateComplete;\n\n const expandBtn = el.shadowRoot?.querySelector(\n '.expand-date-picker-btn'\n ) as HTMLButtonElement;\n expect(expandBtn).to.exist;\n\n // Click the expand button to open the modal\n expandBtn?.click();\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('histogramExpanded');\n expect(mockAnalyticsHandler.callLabel).to.equal(window.location.href);\n });\n\n it('fires analytics on clicking Part Of collection link', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<CollectionFacets>(\n html`<collection-facets\n .baseNavigationUrl=${''}\n .withinCollection=${'foo'}\n .parentCollections=${['bar']}\n .analyticsHandler=${mockAnalyticsHandler}\n ></collection-facets>`\n );\n\n const partOfLinks = el.shadowRoot?.querySelectorAll(\n '.partof-collections a[href]'\n );\n expect(partOfLinks?.length).to.equal(1);\n\n // Click the expand button to open the modal\n const link = partOfLinks?.[0] as HTMLAnchorElement;\n link?.addEventListener('click', e => e.preventDefault());\n link?.click();\n await el.updateComplete;\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('partOfCollectionClicked');\n expect(mockAnalyticsHandler.callLabel).to.equal('bar');\n });\n});\n"]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "The Internet Archive Collection Browser.",
4
4
  "license": "AGPL-3.0-only",
5
5
  "author": "Internet Archive",
6
- "version": "1.14.17-alpha.1",
6
+ "version": "1.14.17-alpha.3",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist/index.js",
9
9
  "scripts": {
package/src/app-root.ts CHANGED
@@ -395,6 +395,31 @@ export class AppRoot extends LitElement {
395
395
  </label>
396
396
  </div>
397
397
  </fieldset>
398
+
399
+ <fieldset class="user-profile-controls">
400
+ <legend>Set Placeholder Types</legend>
401
+ <div class="checkbox-control">
402
+ <input
403
+ id="enable-loading-placeholder"
404
+ type="radio"
405
+ @click=${() => this.setPlaceholderType('loading-placeholder')}
406
+ name="placeholder-radio"
407
+ />
408
+ <label for="enable-loading-placeholder"
409
+ >Loading Placeholder</label
410
+ >
411
+ </div>
412
+ <div class="checkbox-control">
413
+ <input
414
+ id="enable-empty-placeholder"
415
+ type="radio"
416
+ @click=${() => this.setPlaceholderType('error-placeholder')}
417
+ value="empty-placeholder"
418
+ name="placeholder-radio"
419
+ />
420
+ <label for="enable-empty-placeholder">Empty Placeholder</label>
421
+ </div>
422
+ </fieldset>
398
423
  </div>
399
424
  <button id="toggle-dev-tools-btn" @click=${this.toggleDevTools}>
400
425
  Toggle Search Controls
@@ -427,6 +452,20 @@ export class AppRoot extends LitElement {
427
452
  `;
428
453
  }
429
454
 
455
+ private async setPlaceholderType(type: String) {
456
+ switch (type) {
457
+ case 'loading-placeholder':
458
+ this.collectionBrowser.baseQuery = '';
459
+ this.collectionBrowser.suppressPlaceholders = true;
460
+ this.collectionBrowser.clearResultsOnEmptyQuery = true;
461
+ this.requestUpdate();
462
+ await this.collectionBrowser.updateComplete;
463
+ break;
464
+ default:
465
+ break;
466
+ }
467
+ }
468
+
430
469
  private baseQueryChanged(e: CustomEvent<{ baseQuery?: string }>): void {
431
470
  this.searchQuery = e.detail.baseQuery;
432
471
  }
@@ -137,8 +137,6 @@ export class CollectionBrowser
137
137
 
138
138
  @property({ type: String }) collectionPagePath: string = '/details/';
139
139
 
140
- @property({ type: Array }) parentCollections: string[] = [];
141
-
142
140
  /** describes where this component is being used */
143
141
  @property({ type: String, reflect: true }) searchContext: string =
144
142
  analyticsCategories.default;
@@ -238,11 +236,6 @@ export class CollectionBrowser
238
236
  */
239
237
  private isScrollingToCell = false;
240
238
 
241
- /**
242
- * When we've reached the end of the data, stop trying to fetch more
243
- */
244
- private endOfDataReached = false;
245
-
246
239
  /**
247
240
  * When page width resizes from desktop to mobile, set true to
248
241
  * disable expand/collapse transition when loading.
@@ -330,14 +323,27 @@ export class CollectionBrowser
330
323
  return this.scrollToPage(pageNumber);
331
324
  }
332
325
 
333
- setSearchResultsLoading(loading: boolean) {
326
+ /**
327
+ * Sets the state for whether the initial set of search results is loading in.
328
+ */
329
+ setSearchResultsLoading(loading: boolean): void {
334
330
  this.searchResultsLoading = loading;
335
331
  }
336
332
 
337
- setFacetsLoading(loading: boolean) {
333
+ /**
334
+ * Sets the state for whether facet data is loading in
335
+ */
336
+ setFacetsLoading(loading: boolean): void {
338
337
  this.facetsLoading = loading;
339
338
  }
340
339
 
340
+ /**
341
+ * Sets the total number of results to be displayed for the current search
342
+ */
343
+ setTotalResultCount(totalResults: number): void {
344
+ this.totalResults = totalResults;
345
+ }
346
+
341
347
  /**
342
348
  * Clears all selected/negated facets, date ranges, and letter filters.
343
349
  *
@@ -634,8 +640,8 @@ export class CollectionBrowser
634
640
  showSelectAll
635
641
  showUnselectAll
636
642
  @removeItems=${this.handleRemoveItems}
637
- @selectAll=${this.dataSource.checkAllTiles}
638
- @unselectAll=${this.dataSource.uncheckAllTiles}
643
+ @selectAll=${() => this.dataSource.checkAllTiles()}
644
+ @unselectAll=${() => this.dataSource.uncheckAllTiles()}
639
645
  @cancel=${() => {
640
646
  this.isManageView = false;
641
647
  this.dataSource.uncheckAllTiles();
@@ -858,7 +864,7 @@ export class CollectionBrowser
858
864
  @facetsChanged=${this.facetsChanged}
859
865
  @histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
860
866
  .collectionPagePath=${this.collectionPagePath}
861
- .parentCollections=${this.parentCollections}
867
+ .parentCollections=${this.dataSource.parentCollections}
862
868
  .withinCollection=${this.withinCollection}
863
869
  .searchService=${this.searchService}
864
870
  .featureFeedbackService=${this.featureFeedbackService}
@@ -1108,7 +1114,7 @@ export class CollectionBrowser
1108
1114
  }
1109
1115
 
1110
1116
  if (changed.has('pagesToRender')) {
1111
- if (!this.endOfDataReached && this.infiniteScroller) {
1117
+ if (!this.dataSource.endOfDataReached && this.infiniteScroller) {
1112
1118
  this.infiniteScroller.itemCount = this.estimatedTileCount;
1113
1119
  }
1114
1120
  }
@@ -1348,6 +1354,12 @@ export class CollectionBrowser
1348
1354
  }
1349
1355
 
1350
1356
  private async handleQueryChange() {
1357
+ console.log(
1358
+ 'CB: handling query change',
1359
+ this.previousQueryKey,
1360
+ this.dataSource.pageFetchQueryKey,
1361
+ this.dataSource.canPerformSearch
1362
+ );
1351
1363
  // only reset if the query has actually changed
1352
1364
  if (
1353
1365
  !this.searchService ||
@@ -1362,12 +1374,16 @@ export class CollectionBrowser
1362
1374
  )
1363
1375
  return;
1364
1376
 
1377
+ console.log(
1378
+ 'CB will reset',
1379
+ this.baseQuery,
1380
+ JSON.stringify(this.selectedFacets)
1381
+ );
1365
1382
  this.previousQueryKey = this.dataSource.pageFetchQueryKey;
1366
1383
  this.emitQueryStateChanged();
1367
1384
 
1368
1385
  this.tileModelOffset = 0;
1369
1386
  this.totalResults = undefined;
1370
- this.endOfDataReached = false;
1371
1387
  this.pagesToRender =
1372
1388
  this.initialPageNumber === 1
1373
1389
  ? 2 // First two pages are batched into one request when starting from page 1
@@ -1528,7 +1544,11 @@ export class CollectionBrowser
1528
1544
  return !!this.baseQuery?.trim();
1529
1545
  }
1530
1546
 
1531
- setTotalResultCount(count: number): void {
1547
+ /**
1548
+ * Sets the total number of tiles displayed in the infinite scroller.
1549
+ */
1550
+ setTileCount(count: number): void {
1551
+ console.log('Setting scroller tile count to', count);
1532
1552
  if (this.infiniteScroller) {
1533
1553
  this.infiniteScroller.itemCount = count;
1534
1554
  }
@@ -1642,9 +1662,7 @@ export class CollectionBrowser
1642
1662
  if (this.isManageView) {
1643
1663
  // Checked/unchecked state change -- rerender to ensure it propagates
1644
1664
  // this.mapDataSource(model => ({ ...model }));
1645
- const cellIndex = Object.values(this.dataSource)
1646
- .flat()
1647
- .indexOf(event.detail);
1665
+ const cellIndex = this.dataSource.indexOf(event.detail);
1648
1666
  if (cellIndex >= 0)
1649
1667
  this.infiniteScroller?.refreshCell(cellIndex - this.tileModelOffset);
1650
1668
  }
@@ -1693,7 +1711,7 @@ export class CollectionBrowser
1693
1711
  * increase the number of pages to render and start fetching data for the new page
1694
1712
  */
1695
1713
  private scrollThresholdReached() {
1696
- if (!this.endOfDataReached) {
1714
+ if (!this.dataSource.endOfDataReached) {
1697
1715
  this.pagesToRender += 1;
1698
1716
  this.dataSource.fetchPage(this.pagesToRender);
1699
1717
  }
@@ -2017,9 +2035,9 @@ export class CollectionBrowser
2017
2035
  --collectionBrowserCellMinWidth,
2018
2036
  100%
2019
2037
  );
2020
- --infiniteScrollerCellMinHeight: 34px; /* override infinite scroller component */
2038
+ --infiniteScrollerCellMinHeight: 45px; /* override infinite scroller component */
2021
2039
  --infiniteScrollerCellMaxHeight: 56px;
2022
- --infiniteScrollerRowGap: 0px;
2040
+ --infiniteScrollerRowGap: 10px;
2023
2041
  }
2024
2042
 
2025
2043
  infinite-scroller.list-detail {
@@ -44,6 +44,12 @@ export interface CollectionBrowserDataSourceInterface
44
44
  */
45
45
  readonly canPerformSearch: boolean;
46
46
 
47
+ /**
48
+ * Whether the end of the set of results for the current query state has been
49
+ * encountered (i.e., the last page of results).
50
+ */
51
+ readonly endOfDataReached: boolean;
52
+
47
53
  /**
48
54
  * A string key compactly representing the current full search state, which can
49
55
  * be used to determine, e.g., when a new search is required or whether an arriving
@@ -162,6 +168,13 @@ export interface CollectionBrowserDataSourceInterface
162
168
  */
163
169
  getTileModelAt(index: number): TileModel | undefined;
164
170
 
171
+ /**
172
+ * Returns the first numeric tile index corresponding to the given tile model object,
173
+ * or -1 if the given tile model is not present.
174
+ * @param tile The tile model to search for in the data source
175
+ */
176
+ indexOf(tile: TileModel): number;
177
+
165
178
  /**
166
179
  * Requests that the data source fire a backend request for the given page of results.
167
180
  * @param pageNum Which page number to fetch results for
@@ -235,8 +248,14 @@ export class CollectionBrowserDataSource
235
248
  */
236
249
  private pageFetchesInProgress: Record<string, Set<number>> = {};
237
250
 
251
+ /**
252
+ * @inheritdoc
253
+ */
238
254
  totalResults = 0;
239
255
 
256
+ /**
257
+ * @inheritdoc
258
+ */
240
259
  endOfDataReached = false;
241
260
 
242
261
  /**
@@ -336,6 +355,13 @@ export class CollectionBrowserDataSource
336
355
  return this.pages[pageNum]?.[indexOnPage];
337
356
  }
338
357
 
358
+ /**
359
+ * @inheritdoc
360
+ */
361
+ indexOf(tile: TileModel): number {
362
+ return Object.values(this.pages).flat().indexOf(tile);
363
+ }
364
+
339
365
  /**
340
366
  * @inheritdoc
341
367
  */
@@ -352,10 +378,14 @@ export class CollectionBrowserDataSource
352
378
  this.aggregations = {};
353
379
  this.yearHistogramAggregation = undefined;
354
380
  this.pageFetchesInProgress = {};
381
+ this.pageElements = undefined;
382
+ this.parentCollections = [];
383
+ this.prefixFilterCountMap = {};
355
384
 
356
385
  this.offset = 0;
357
386
  this.numTileModels = 0;
358
387
  this.totalResults = 0;
388
+ this.endOfDataReached = false;
359
389
 
360
390
  this.host.requestUpdate();
361
391
  }
@@ -386,26 +416,27 @@ export class CollectionBrowserDataSource
386
416
  ])
387
417
  );
388
418
  this.host.requestUpdate();
419
+ this.host.refreshVisibleResults();
389
420
  }
390
421
 
391
422
  /**
392
423
  * @inheritdoc
393
424
  */
394
- checkAllTiles(): void {
425
+ checkAllTiles = (): void => {
395
426
  this.map(model => ({ ...model, checked: true }));
396
- }
427
+ };
397
428
 
398
429
  /**
399
430
  * @inheritdoc
400
431
  */
401
- uncheckAllTiles(): void {
432
+ uncheckAllTiles = (): void => {
402
433
  this.map(model => ({ ...model, checked: false }));
403
- }
434
+ };
404
435
 
405
436
  /**
406
437
  * @inheritdoc
407
438
  */
408
- removeCheckedTiles(): void {
439
+ removeCheckedTiles = (): void => {
409
440
  // To make sure our data source remains page-aligned, we will offset our data source by
410
441
  // the number of removed tiles, so that we can just add the offset when the infinite
411
442
  // scroller queries for cell contents.
@@ -443,7 +474,7 @@ export class CollectionBrowserDataSource
443
474
  this.pages = newPages;
444
475
  this.numTileModels -= numChecked;
445
476
  this.host.requestUpdate();
446
- }
477
+ };
447
478
 
448
479
  /**
449
480
  * @inheritdoc
@@ -880,6 +911,14 @@ export class CollectionBrowserDataSource
880
911
  * if `pageNumber != 1`, defaulting to a single page.
881
912
  */
882
913
  async fetchPage(pageNumber: number, numInitialPages = 1): Promise<void> {
914
+ console.log(
915
+ `fetchPage(${pageNumber})`,
916
+ this.canPerformSearch,
917
+ this.hasPage(pageNumber),
918
+ this.endOfDataReached,
919
+ this.host.baseQuery,
920
+ JSON.stringify(this.host.selectedFacets)
921
+ );
883
922
  const trimmedQuery = this.host.baseQuery?.trim();
884
923
  if (!this.canPerformSearch) return;
885
924
 
@@ -897,7 +936,12 @@ export class CollectionBrowserDataSource
897
936
  const { pageFetchQueryKey } = this;
898
937
  const pageFetches =
899
938
  this.pageFetchesInProgress[pageFetchQueryKey] ?? new Set();
900
- if (pageFetches.has(pageNumber)) return;
939
+ if (pageFetches.has(pageNumber)) {
940
+ console.log(
941
+ `Skipping fetch for page ${pageNumber} because one is already in progress`
942
+ );
943
+ return;
944
+ }
901
945
  for (let i = 0; i < numPages; i += 1) {
902
946
  pageFetches.add(pageNumber + i);
903
947
  }
@@ -920,7 +964,7 @@ export class CollectionBrowserDataSource
920
964
  params,
921
965
  this.host.searchType
922
966
  );
923
- console.log('=== RECEIVED PAGE RESPONS IN CB === ');
967
+ console.log('=== RECEIVED PAGE RESPONSE IN CB === ');
924
968
  const success = searchResponse?.success;
925
969
 
926
970
  // This is checking to see if the query has changed since the data was fetched.
@@ -954,6 +998,7 @@ export class CollectionBrowserDataSource
954
998
  }
955
999
 
956
1000
  this.totalResults = success.response.totalResults - this.offset;
1001
+ this.host.setTotalResultCount(this.totalResults);
957
1002
 
958
1003
  // display event to offshoot when result count is zero.
959
1004
  if (this.totalResults === 0) {
@@ -973,7 +1018,10 @@ export class CollectionBrowserDataSource
973
1018
  );
974
1019
  }
975
1020
  } else if (this.host.withinProfile) {
976
- console.log('host is within profile, setting acct info:', success.response.accountExtraInfo);
1021
+ console.log(
1022
+ 'host is within profile, setting acct info:',
1023
+ success.response.accountExtraInfo
1024
+ );
977
1025
  this.accountExtraInfo = success.response.accountExtraInfo;
978
1026
  this.pageElements = success.response.pageElements;
979
1027
  }
@@ -1003,8 +1051,9 @@ export class CollectionBrowserDataSource
1003
1051
  // temporary estimates based on pages rendered so far).
1004
1052
  const resultCountDiscrepancy = numRows - results.length;
1005
1053
  if (resultCountDiscrepancy > 0) {
1054
+ console.log('End of data reached');
1006
1055
  this.endOfDataReached = true;
1007
- this.host.setTotalResultCount(this.totalResults);
1056
+ this.host.setTileCount(this.totalResults);
1008
1057
  }
1009
1058
 
1010
1059
  for (let i = 0; i < numPages; i += 1) {
@@ -68,6 +68,7 @@ export interface CollectionBrowserSearchInterface
68
68
  setSearchResultsLoading(loading: boolean): void;
69
69
  setFacetsLoading(loading: boolean): void;
70
70
  setTotalResultCount(count: number): void;
71
+ setTileCount(count: number): void;
71
72
  applyDefaultCollectionSort(collectionInfo?: CollectionExtraInfo): void;
72
73
  emitEmptyResults(): void;
73
74
  refreshVisibleResults(): void;