@internetarchive/collection-browser 0.2.12 → 0.2.14-alpha1
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 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/src/app-root.d.ts +33 -0
- package/dist/src/app-root.js +311 -0
- package/dist/src/app-root.js.map +1 -0
- package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-left.js +10 -0
- package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-right.js +10 -0
- package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
- package/dist/src/assets/img/icons/chevron.d.ts +2 -0
- package/dist/src/assets/img/icons/chevron.js +4 -0
- package/dist/src/assets/img/icons/chevron.js.map +1 -0
- package/dist/src/assets/img/icons/empty-query.d.ts +2 -0
- package/dist/src/assets/img/icons/empty-query.js +5 -0
- package/dist/src/assets/img/icons/empty-query.js.map +1 -0
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
- package/dist/src/assets/img/icons/eye-closed.js +5 -0
- package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
- package/dist/src/assets/img/icons/eye.d.ts +2 -0
- package/dist/src/assets/img/icons/eye.js +5 -0
- package/dist/src/assets/img/icons/eye.js.map +1 -0
- package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -0
- package/dist/src/assets/img/icons/favorite-filled.js +11 -0
- package/dist/src/assets/img/icons/favorite-filled.js.map +1 -0
- package/dist/src/assets/img/icons/login-required.d.ts +1 -0
- package/dist/src/assets/img/icons/login-required.js +30 -0
- package/dist/src/assets/img/icons/login-required.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/account.js +14 -0
- package/dist/src/assets/img/icons/mediatype/account.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/audio.js +14 -0
- package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/collection.js +12 -0
- package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/data.js +15 -0
- package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/etree.js +14 -0
- package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/film.js +14 -0
- package/dist/src/assets/img/icons/mediatype/film.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/images.js +13 -0
- package/dist/src/assets/img/icons/mediatype/images.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
- package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/software.js +13 -0
- package/dist/src/assets/img/icons/mediatype/software.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/texts.js +13 -0
- package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/tv.js +14 -0
- package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/video.js +14 -0
- package/dist/src/assets/img/icons/mediatype/video.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/web.js +13 -0
- package/dist/src/assets/img/icons/mediatype/web.js.map +1 -0
- package/dist/src/assets/img/icons/null-result.d.ts +2 -0
- package/dist/src/assets/img/icons/null-result.js +5 -0
- package/dist/src/assets/img/icons/null-result.js.map +1 -0
- package/dist/src/assets/img/icons/restricted.d.ts +1 -0
- package/dist/src/assets/img/icons/restricted.js +29 -0
- package/dist/src/assets/img/icons/restricted.js.map +1 -0
- package/dist/src/assets/img/icons/reviews.d.ts +1 -0
- package/dist/src/assets/img/icons/reviews.js +11 -0
- package/dist/src/assets/img/icons/reviews.js.map +1 -0
- package/dist/src/assets/img/icons/upload.d.ts +1 -0
- package/dist/src/assets/img/icons/upload.js +12 -0
- package/dist/src/assets/img/icons/upload.js.map +1 -0
- package/dist/src/assets/img/icons/views.d.ts +1 -0
- package/dist/src/assets/img/icons/views.js +11 -0
- package/dist/src/assets/img/icons/views.js.map +1 -0
- package/dist/src/circular-activity-indicator.d.ts +5 -0
- package/dist/src/circular-activity-indicator.js +66 -0
- package/dist/src/circular-activity-indicator.js.map +1 -0
- package/dist/src/collection-browser.d.ts +216 -0
- package/dist/src/collection-browser.js +1248 -0
- package/dist/src/collection-browser.js.map +1 -0
- package/dist/src/collection-facets/more-facets-content.d.ts +50 -0
- package/dist/src/collection-facets/more-facets-content.js +354 -0
- package/dist/src/collection-facets/more-facets-content.js.map +1 -0
- package/dist/src/collection-facets/more-facets-pagination.d.ts +27 -0
- package/dist/src/collection-facets/more-facets-pagination.js +193 -0
- package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
- package/dist/src/collection-facets.d.ts +80 -0
- package/dist/src/collection-facets.js +662 -0
- package/dist/src/collection-facets.js.map +1 -0
- package/dist/src/empty-placeholder.d.ts +11 -0
- package/dist/src/empty-placeholder.js +83 -0
- package/dist/src/empty-placeholder.js.map +1 -0
- package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
- package/dist/src/language-code-handler/language-code-handler.js +27 -0
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
- package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
- package/dist/src/language-code-handler/language-code-mapping.js +563 -0
- package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
- package/dist/src/mediatype/mediatype-config.d.ts +3 -0
- package/dist/src/mediatype/mediatype-config.js +86 -0
- package/dist/src/mediatype/mediatype-config.js.map +1 -0
- package/dist/src/models.d.ts +84 -0
- package/dist/src/models.js +58 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/restoration-state-handler.d.ts +38 -0
- package/dist/src/restoration-state-handler.js +204 -0
- package/dist/src/restoration-state-handler.js.map +1 -0
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -0
- package/dist/src/sort-filter-bar/alpha-bar.js +98 -0
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -0
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/compact.js +5 -0
- package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/list.js +5 -0
- package/dist/src/sort-filter-bar/img/list.js.map +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/tile.js +5 -0
- package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +85 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.js +698 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -0
- package/dist/src/styles/item-image-styles.d.ts +8 -0
- package/dist/src/styles/item-image-styles.js +102 -0
- package/dist/src/styles/item-image-styles.js.map +1 -0
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
- package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
- package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
- package/dist/src/tiles/grid/account-tile.d.ts +8 -0
- package/dist/src/tiles/grid/account-tile.js +126 -0
- package/dist/src/tiles/grid/account-tile.js.map +1 -0
- package/dist/src/tiles/grid/collection-tile.d.ts +7 -0
- package/dist/src/tiles/grid/collection-tile.js +159 -0
- package/dist/src/tiles/grid/collection-tile.js.map +1 -0
- package/dist/src/tiles/grid/item-tile.d.ts +21 -0
- package/dist/src/tiles/grid/item-tile.js +183 -0
- package/dist/src/tiles/grid/item-tile.js.map +1 -0
- package/dist/src/tiles/grid/tile-stats.d.ts +10 -0
- package/dist/src/tiles/grid/tile-stats.js +134 -0
- package/dist/src/tiles/grid/tile-stats.js.map +1 -0
- package/dist/src/tiles/image-block.d.ts +17 -0
- package/dist/src/tiles/image-block.js +136 -0
- package/dist/src/tiles/image-block.js.map +1 -0
- package/dist/src/tiles/item-image.d.ts +31 -0
- package/dist/src/tiles/item-image.js +118 -0
- package/dist/src/tiles/item-image.js.map +1 -0
- package/dist/src/tiles/list/account-label.d.ts +1 -0
- package/dist/src/tiles/list/account-label.js +7 -0
- package/dist/src/tiles/list/account-label.js.map +1 -0
- package/dist/src/tiles/list/date-label.d.ts +1 -0
- package/dist/src/tiles/list/date-label.js +13 -0
- package/dist/src/tiles/list/date-label.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
- package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact.d.ts +20 -0
- package/dist/src/tiles/list/tile-list-compact.js +180 -0
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -0
- package/dist/src/tiles/list/tile-list.d.ts +48 -0
- package/dist/src/tiles/list/tile-list.js +455 -0
- package/dist/src/tiles/list/tile-list.js.map +1 -0
- package/dist/src/tiles/mediatype-icon.d.ts +9 -0
- package/dist/src/tiles/mediatype-icon.js +82 -0
- package/dist/src/tiles/mediatype-icon.js.map +1 -0
- package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -0
- package/dist/src/tiles/overlay/icon-overlay.js +43 -0
- package/dist/src/tiles/overlay/icon-overlay.js.map +1 -0
- package/dist/src/tiles/overlay/text-overlay.d.ts +8 -0
- package/dist/src/tiles/overlay/text-overlay.js +57 -0
- package/dist/src/tiles/overlay/text-overlay.js.map +1 -0
- package/dist/src/tiles/tile-dispatcher.d.ts +36 -0
- package/dist/src/tiles/tile-dispatcher.js +215 -0
- package/dist/src/tiles/tile-dispatcher.js.map +1 -0
- package/dist/src/utils/format-count.d.ts +7 -0
- package/dist/src/utils/format-count.js +76 -0
- package/dist/src/utils/format-count.js.map +1 -0
- package/dist/src/utils/format-date.d.ts +2 -0
- package/dist/src/utils/format-date.js +24 -0
- package/dist/src/utils/format-date.js.map +1 -0
- package/dist/test/collection-browser.test.d.ts +1 -0
- package/dist/test/collection-browser.test.js +47 -0
- package/dist/test/collection-browser.test.js.map +1 -0
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
- package/dist/test/collection-facets/more-facets-content.test.js +75 -0
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
- package/dist/test/collection-facets/more-facets-pagination.test.js +38 -0
- package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
- package/dist/test/empty-placeholder.test.d.ts +1 -0
- package/dist/test/empty-placeholder.test.js +34 -0
- package/dist/test/empty-placeholder.test.js.map +1 -0
- package/dist/test/icon-overlay.test.d.ts +1 -0
- package/dist/test/icon-overlay.test.js +31 -0
- package/dist/test/icon-overlay.test.js.map +1 -0
- package/dist/test/item-image.test.d.ts +1 -0
- package/dist/test/item-image.test.js +73 -0
- package/dist/test/item-image.test.js.map +1 -0
- package/dist/test/mediatype-config.test.d.ts +1 -0
- package/dist/test/mediatype-config.test.js +17 -0
- package/dist/test/mediatype-config.test.js.map +1 -0
- package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -0
- package/dist/test/mocks/mock-collection-name-cache.js +14 -0
- package/dist/test/mocks/mock-collection-name-cache.js.map +1 -0
- package/dist/test/mocks/mock-search-responses.d.ts +3 -0
- package/dist/test/mocks/mock-search-responses.js +45 -0
- package/dist/test/mocks/mock-search-responses.js.map +1 -0
- package/dist/test/mocks/mock-search-service.d.ts +8 -0
- package/dist/test/mocks/mock-search-service.js +16 -0
- package/dist/test/mocks/mock-search-service.js.map +1 -0
- package/dist/test/text-overlay.test.d.ts +1 -0
- package/dist/test/text-overlay.test.js +48 -0
- package/dist/test/text-overlay.test.js.map +1 -0
- package/dist/test/tile-stats.test.d.ts +1 -0
- package/dist/test/tile-stats.test.js +42 -0
- package/dist/test/tile-stats.test.js.map +1 -0
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -0
- package/dist/test/tiles/grid/item-tile.test.js +96 -0
- package/dist/test/tiles/grid/item-tile.test.js.map +1 -0
- package/dist/test/utils/format-count.test.d.ts +1 -0
- package/dist/test/utils/format-count.test.js +24 -0
- package/dist/test/utils/format-count.test.js.map +1 -0
- package/dist/test/utils/format-date.test.d.ts +1 -0
- package/dist/test/utils/format-date.test.js +18 -0
- package/dist/test/utils/format-date.test.js.map +1 -0
- package/package.json +5 -2
- package/src/app-root.ts +28 -2
- package/src/assets/img/icons/arrow-left.ts +10 -0
- package/src/assets/img/icons/arrow-right.ts +10 -0
- package/src/collection-browser.ts +8 -2
- package/src/collection-facets/more-facets-content.ts +371 -0
- package/src/collection-facets/more-facets-pagination.ts +201 -0
- package/src/collection-facets.ts +119 -3
- package/src/restoration-state-handler.ts +1 -1
- package/src/sort-filter-bar/sort-filter-bar.ts +1 -1
- package/src/tiles/grid/account-tile.ts +1 -1
- package/src/tiles/grid/collection-tile.ts +1 -1
- package/src/tiles/grid/item-tile.ts +2 -2
- package/src/tiles/image-block.ts +1 -1
- package/src/tiles/item-image.ts +1 -1
- package/src/tiles/list/tile-list-compact-header.ts +2 -2
- package/src/tiles/list/tile-list-compact.ts +2 -2
- package/src/tiles/list/tile-list.ts +4 -4
- package/src/tiles/tile-dispatcher.ts +2 -2
- package/test/collection-browser.test.ts +1 -1
- package/test/collection-facets/more-facets-content.test.ts +113 -0
- package/test/collection-facets/more-facets-pagination.test.ts +70 -0
- package/test/empty-placeholder.test.ts +2 -1
- package/test/icon-overlay.test.ts +1 -1
- package/test/item-image.test.ts +2 -2
- package/test/mocks/mock-collection-name-cache.ts +1 -1
- package/test/mocks/mock-search-responses.ts +14 -1
- package/test/mocks/mock-search-service.ts +2 -2
- package/test/text-overlay.test.ts +1 -1
- package/test/tile-stats.test.ts +1 -1
- package/test/tiles/grid/item-tile.test.ts +1 -1
- package/tsconfig.json +3 -2
- package/types/dompurify.d.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-tile.test.js","sourceRoot":"","sources":["../../../../test/tiles/grid/item-tile.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-duplicates */\nimport { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { ItemTile } from '../../../src/tiles/grid/item-tile';\n\nimport '../../../src/tiles/grid/item-tile';\n\ndescribe('Item Tile', () => {\n it('should render initial component', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const itemTitle = el.shadowRoot?.querySelector('#title');\n const imageBlock = el.shadowRoot?.querySelector('image-block');\n\n expect(itemInfo).to.exist;\n expect(imageBlock).to.exist;\n expect(itemTitle).to.exist;\n });\n\n it('should render with created-by element', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(itemInfo).to.exist;\n expect(createdBy).to.exist;\n expect(dateSortedBy).to.not.exist;\n });\n\n it('should not render with created-by but date element', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n el.sortParam = {\n field: 'date',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should not render with created-by but reviewdate element', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n el.sortParam = {\n field: 'reviewdate',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should not render with created-by but publicdate element', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n el.sortParam = {\n field: 'publicdate',\n direction: 'desc',\n };\n await el.updateComplete;\n\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should render with created-by when sorting not related to date', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n el.sortParam = {\n field: 'addeddate',\n direction: 'asc',\n };\n await el.updateComplete;\n\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(itemInfo).to.exist;\n expect(createdBy).to.not.exist;\n expect(dateSortedBy).to.exist;\n });\n\n it('should render with created-by when sort field id not like date', async () => {\n const el = await fixture<ItemTile>(html`<item-tile></item-tile>`);\n\n el.sortParam = {\n field: 'week',\n direction: 'asc',\n };\n await el.updateComplete;\n\n const itemInfo = el.shadowRoot?.querySelector('.item-info');\n const createdBy = el.shadowRoot?.querySelector('.created-by');\n const dateSortedBy = el.shadowRoot?.querySelector('.date-sorted-by');\n\n expect(itemInfo).to.exist;\n expect(dateSortedBy).to.not.exist; // it should be exist because this is not related to date sort\n expect(createdBy).to.exist;\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { expect } from '@open-wc/testing';
|
|
2
|
+
import { formatCount } from '../../src/utils/format-count';
|
|
3
|
+
const testCount = 805342;
|
|
4
|
+
describe('formatCount', () => {
|
|
5
|
+
it('returns blank when undefined number', () => {
|
|
6
|
+
expect(formatCount(undefined)).to.equal('');
|
|
7
|
+
});
|
|
8
|
+
it('returns blank when negative number', () => {
|
|
9
|
+
expect(formatCount(testCount * -1)).to.equal('');
|
|
10
|
+
});
|
|
11
|
+
it('returns long number when no NumberFormat', () => {
|
|
12
|
+
expect(formatCount(testCount)).to.equal('805,342');
|
|
13
|
+
});
|
|
14
|
+
it('returns short number when short NumberFormat', () => {
|
|
15
|
+
expect(formatCount(testCount, 'short')).to.equal('805K');
|
|
16
|
+
});
|
|
17
|
+
it('returns decimal when value of significant digits < 10', () => {
|
|
18
|
+
expect(formatCount(testCount * 10, 'short', 'long')).to.equal('8.1 million');
|
|
19
|
+
});
|
|
20
|
+
it('returns locale formatted number', () => {
|
|
21
|
+
expect(formatCount(testCount, 'long', 'long', 'de-DE')).to.equal('805.342');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=format-count.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-count.test.js","sourceRoot":"","sources":["../../../test/utils/format-count.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC3D,aAAa,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { formatCount } from '../../src/utils/format-count';\n\nconst testCount = 805342;\n\ndescribe('formatCount', () => {\n it('returns blank when undefined number', () => {\n expect(formatCount(undefined)).to.equal('');\n });\n\n it('returns blank when negative number', () => {\n expect(formatCount(testCount * -1)).to.equal('');\n });\n\n it('returns long number when no NumberFormat', () => {\n expect(formatCount(testCount)).to.equal('805,342');\n });\n\n it('returns short number when short NumberFormat', () => {\n expect(formatCount(testCount, 'short')).to.equal('805K');\n });\n\n it('returns decimal when value of significant digits < 10', () => {\n expect(formatCount(testCount * 10, 'short', 'long')).to.equal(\n '8.1 million'\n );\n });\n\n it('returns locale formatted number', () => {\n expect(formatCount(testCount, 'long', 'long', 'de-DE')).to.equal('805.342');\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { expect } from '@open-wc/testing';
|
|
2
|
+
import { formatDate } from '../../src/utils/format-date';
|
|
3
|
+
const testDate = new Date(Date.UTC(2020, 11, 9));
|
|
4
|
+
describe('formatDate', () => {
|
|
5
|
+
it('returns blank when undefined date', () => {
|
|
6
|
+
expect(formatDate(undefined)).to.equal('');
|
|
7
|
+
});
|
|
8
|
+
it('returns short date when no DateFormat', () => {
|
|
9
|
+
expect(formatDate(testDate)).to.equal('Dec 2020');
|
|
10
|
+
});
|
|
11
|
+
it('returns long date when long DateFormat', () => {
|
|
12
|
+
expect(formatDate(testDate, 'long')).to.equal('Dec 09, 2020');
|
|
13
|
+
});
|
|
14
|
+
it('returns locale formatted date', () => {
|
|
15
|
+
expect(formatDate(testDate, 'long', 'de-DE')).to.equal('09. Dez. 2020');
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=format-date.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-date.test.js","sourceRoot":"","sources":["../../../test/utils/format-date.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect } from '@open-wc/testing';\nimport { formatDate } from '../../src/utils/format-date';\n\nconst testDate = new Date(Date.UTC(2020, 11, 9));\n\ndescribe('formatDate', () => {\n it('returns blank when undefined date', () => {\n expect(formatDate(undefined)).to.equal('');\n });\n\n it('returns short date when no DateFormat', () => {\n expect(formatDate(testDate)).to.equal('Dec 2020');\n });\n\n it('returns long date when long DateFormat', () => {\n expect(formatDate(testDate, 'long')).to.equal('Dec 09, 2020');\n });\n\n it('returns locale formatted date', () => {\n expect(formatDate(testDate, 'long', 'de-DE')).to.equal('09. Dez. 2020');\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": "0.2.
|
|
6
|
+
"version": "0.2.14-alpha1",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"module": "dist/index.js",
|
|
9
9
|
"scripts": {
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"",
|
|
18
18
|
"deploy": "yarn run deploy:run -e $(git branch --show-current)",
|
|
19
19
|
"deploy:run": "yarn run prepare:ghpages && touch ghpages/.nojekyll && yarn run deploy:gh",
|
|
20
|
-
"deploy:gh": "gh-pages -t -d ghpages -m \"Build for $(git log --pretty=format:\"%h %an %ai %s\" -n1) [skip ci]\""
|
|
20
|
+
"deploy:gh": "gh-pages -t -d ghpages -m \"Build for $(git log --pretty=format:\"%h %an %ai %s\" -n1) [skip ci]\"",
|
|
21
|
+
"typecheck": "yarn tsc --noEmit"
|
|
21
22
|
},
|
|
22
23
|
"types": "dist/index.d.ts",
|
|
23
24
|
"dependencies": {
|
|
@@ -25,8 +26,10 @@
|
|
|
25
26
|
"@internetarchive/feature-feedback": "^0.1.4",
|
|
26
27
|
"@internetarchive/field-parsers": "^0.1.3",
|
|
27
28
|
"@internetarchive/histogram-date-range": "^0.1.7",
|
|
29
|
+
"@internetarchive/ia-activity-indicator": "^0.0.3",
|
|
28
30
|
"@internetarchive/infinite-scroller": "^0.1.3",
|
|
29
31
|
"@internetarchive/local-cache": "^0.2.1",
|
|
32
|
+
"@internetarchive/modal-manager": "^0.2.6",
|
|
30
33
|
"@internetarchive/search-service": "^0.3.4",
|
|
31
34
|
"@internetarchive/shared-resize-observer": "^0.2.0",
|
|
32
35
|
"@lit/localize": "^0.11.2",
|
package/src/app-root.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { html, css, LitElement, PropertyValues } from 'lit';
|
|
|
4
4
|
import { customElement, query, state } from 'lit/decorators.js';
|
|
5
5
|
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
|
6
6
|
import { CollectionNameCache } from '@internetarchive/collection-name-cache';
|
|
7
|
+
import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
7
8
|
import type { CollectionBrowser } from '../src/collection-browser';
|
|
8
9
|
import '../src/collection-browser';
|
|
9
10
|
|
|
@@ -40,6 +41,8 @@ export class AppRoot extends LitElement {
|
|
|
40
41
|
|
|
41
42
|
@query('collection-browser') private collectionBrowser!: CollectionBrowser;
|
|
42
43
|
|
|
44
|
+
@query('modal-manager') private modalManager!: ModalManagerInterface;
|
|
45
|
+
|
|
43
46
|
private searchPressed(e: Event) {
|
|
44
47
|
e.preventDefault();
|
|
45
48
|
this.searchQuery = this.baseQueryField.value;
|
|
@@ -171,11 +174,13 @@ export class AppRoot extends LitElement {
|
|
|
171
174
|
.collectionNameCache=${this.collectionNameCache}
|
|
172
175
|
.showHistogramDatePicker=${true}
|
|
173
176
|
.loggedIn=${this.loggedIn}
|
|
177
|
+
.modalManager=${this.modalManager}
|
|
174
178
|
@visiblePageChanged=${this.visiblePageChanged}
|
|
175
179
|
@baseQueryChanged=${this.baseQueryChanged}
|
|
176
180
|
>
|
|
177
181
|
</collection-browser>
|
|
178
182
|
</div>
|
|
183
|
+
<modal-manager></modal-manager>
|
|
179
184
|
`;
|
|
180
185
|
}
|
|
181
186
|
|
|
@@ -257,13 +262,34 @@ export class AppRoot extends LitElement {
|
|
|
257
262
|
display: block;
|
|
258
263
|
}
|
|
259
264
|
|
|
265
|
+
/* add the following styles to ensure proper modal visibility */
|
|
266
|
+
body.modal-manager-open {
|
|
267
|
+
overflow: hidden;
|
|
268
|
+
}
|
|
269
|
+
modal-manager {
|
|
270
|
+
display: none;
|
|
271
|
+
}
|
|
272
|
+
modal-manager[mode='open'] {
|
|
273
|
+
display: block;
|
|
274
|
+
}
|
|
275
|
+
modal-manager.more-search-facets {
|
|
276
|
+
--modalWidth: 85rem;
|
|
277
|
+
--modalBorder: 2px solid #194880;
|
|
278
|
+
--modalTitleLineHeight: 4rem;
|
|
279
|
+
--modalTitleFontSize: 1.8rem;
|
|
280
|
+
--modalCornerRadius: 0;
|
|
281
|
+
--modalBottomPadding: 0;
|
|
282
|
+
--modalScrollOffset: 0;
|
|
283
|
+
--modalCornerRadius: 0.5rem;
|
|
284
|
+
}
|
|
285
|
+
|
|
260
286
|
input,
|
|
261
287
|
button {
|
|
262
288
|
font-size: 1.6rem;
|
|
263
289
|
}
|
|
264
290
|
|
|
265
291
|
collection-browser {
|
|
266
|
-
margin-top:
|
|
292
|
+
margin-top: 20rem;
|
|
267
293
|
}
|
|
268
294
|
|
|
269
295
|
#base-query-field {
|
|
@@ -274,7 +300,7 @@ export class AppRoot extends LitElement {
|
|
|
274
300
|
position: fixed;
|
|
275
301
|
top: 0;
|
|
276
302
|
left: 0;
|
|
277
|
-
z-index:
|
|
303
|
+
z-index: 1;
|
|
278
304
|
-webkit-backdrop-filter: blur(10px);
|
|
279
305
|
backdrop-filter: blur(10px);
|
|
280
306
|
padding: 0.5rem 1rem;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { svg } from 'lit';
|
|
2
|
+
|
|
3
|
+
export default svg`
|
|
4
|
+
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
|
5
|
+
<path
|
|
6
|
+
d="m20.1116715 50.0035012-.1116715-.1085359 43.1159942-46.61088155c2.401537-2.18938917 4.6902018-3.28408375 6.8659943-3.28408375s4.1642651.63837733 5.9654178 1.91513199c1.8011528 1.27675467 3.1520173 2.97248092 4.0525937 5.08717877l-39.4020173 42.99768924 39.4020173 42.9976892c-.9005764 2.1146979-2.2514409 3.8104241-4.0525937 5.0871788-1.8011527 1.2767547-3.7896253 1.915132-5.9654178 1.915132-2.1013449 0-4.3900096-1.0573489-6.8659943-3.1720468l-43.1159942-46.7194174z"
|
|
7
|
+
/>
|
|
8
|
+
<title>Go left icon</title>
|
|
9
|
+
</svg>
|
|
10
|
+
`;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { svg } from 'lit';
|
|
2
|
+
|
|
3
|
+
export default svg`
|
|
4
|
+
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
|
|
5
|
+
<path
|
|
6
|
+
d="m79.8883285 50.0035012.1116715-.1085359-43.1159942-46.61088155c-2.401537-2.18938917-4.6902018-3.28408375-6.8659943-3.28408375s-4.1642651.63837733-5.9654178 1.91513199c-1.8011528 1.27675467-3.1520173 2.97248092-4.0525937 5.08717877l39.4020173 42.99768924-39.4020173 42.9976892c.9005764 2.1146979 2.2514409 3.8104241 4.0525937 5.0871788 1.8011527 1.2767547 3.7896253 1.915132 5.9654178 1.915132 2.1013449 0 4.3900096-1.0573489 6.8659943-3.1720468l43.1159942-46.7194174z"
|
|
7
|
+
/>
|
|
8
|
+
<title>Go right icon</title>
|
|
9
|
+
</svg>
|
|
10
|
+
`;
|
|
@@ -21,12 +21,13 @@ import type {
|
|
|
21
21
|
SortDirection,
|
|
22
22
|
SortParam,
|
|
23
23
|
} from '@internetarchive/search-service';
|
|
24
|
-
import {
|
|
24
|
+
import type {
|
|
25
25
|
SharedResizeObserverInterface,
|
|
26
26
|
SharedResizeObserverResizeHandlerInterface,
|
|
27
27
|
} from '@internetarchive/shared-resize-observer';
|
|
28
28
|
import '@internetarchive/infinite-scroller';
|
|
29
29
|
import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
|
|
30
|
+
import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
30
31
|
import './tiles/tile-dispatcher';
|
|
31
32
|
import './tiles/collection-browser-loading-tile';
|
|
32
33
|
import './sort-filter-bar/sort-filter-bar';
|
|
@@ -49,7 +50,7 @@ import {
|
|
|
49
50
|
} from './restoration-state-handler';
|
|
50
51
|
import chevronIcon from './assets/img/icons/chevron';
|
|
51
52
|
import { LanguageCodeHandler } from './language-code-handler/language-code-handler';
|
|
52
|
-
import { PlaceholderType } from './empty-placeholder';
|
|
53
|
+
import type { PlaceholderType } from './empty-placeholder';
|
|
53
54
|
import './empty-placeholder';
|
|
54
55
|
|
|
55
56
|
@customElement('collection-browser')
|
|
@@ -115,6 +116,8 @@ export class CollectionBrowser
|
|
|
115
116
|
|
|
116
117
|
@property({ type: Boolean }) loggedIn = false;
|
|
117
118
|
|
|
119
|
+
@property({ type: Object }) modalManager?: ModalManagerInterface = undefined;
|
|
120
|
+
|
|
118
121
|
/**
|
|
119
122
|
* If item management UI active
|
|
120
123
|
*/
|
|
@@ -425,6 +428,7 @@ export class CollectionBrowser
|
|
|
425
428
|
<collection-facets
|
|
426
429
|
@facetsChanged=${this.facetsChanged}
|
|
427
430
|
@histogramDateRangeUpdated=${this.histogramDateRangeUpdated}
|
|
431
|
+
.searchService=${this.searchService}
|
|
428
432
|
.aggregations=${this.aggregations}
|
|
429
433
|
.fullYearsHistogramAggregation=${this.fullYearsHistogramAggregation}
|
|
430
434
|
.minSelectedDate=${this.minSelectedDate}
|
|
@@ -433,6 +437,8 @@ export class CollectionBrowser
|
|
|
433
437
|
.collectionNameCache=${this.collectionNameCache}
|
|
434
438
|
.languageCodeHandler=${this.languageCodeHandler}
|
|
435
439
|
.showHistogramDatePicker=${this.showHistogramDatePicker}
|
|
440
|
+
.fullQuery=${this.fullQuery}
|
|
441
|
+
.modalManager=${this.modalManager}
|
|
436
442
|
?collapsableFacets=${this.mobileView}
|
|
437
443
|
?facetsLoading=${this.facetDataLoading}
|
|
438
444
|
?fullYearAggregationLoading=${this.fullYearAggregationLoading}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/* eslint-disable dot-notation */
|
|
2
|
+
import {
|
|
3
|
+
css,
|
|
4
|
+
CSSResultGroup,
|
|
5
|
+
html,
|
|
6
|
+
LitElement,
|
|
7
|
+
nothing,
|
|
8
|
+
PropertyValues,
|
|
9
|
+
} from 'lit';
|
|
10
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
11
|
+
import type {
|
|
12
|
+
Aggregation,
|
|
13
|
+
Bucket,
|
|
14
|
+
SearchServiceInterface,
|
|
15
|
+
SearchParams,
|
|
16
|
+
} from '@internetarchive/search-service';
|
|
17
|
+
import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
|
|
18
|
+
import { SelectedFacets, defaultSelectedFacets } from '../models';
|
|
19
|
+
import type { LanguageCodeHandlerInterface } from '../language-code-handler/language-code-handler';
|
|
20
|
+
import '@internetarchive/ia-activity-indicator/ia-activity-indicator';
|
|
21
|
+
import './more-facets-pagination';
|
|
22
|
+
|
|
23
|
+
@customElement('more-facets-content')
|
|
24
|
+
export class MoreFacetsContent extends LitElement {
|
|
25
|
+
@property({ type: String }) facetKey?: string;
|
|
26
|
+
|
|
27
|
+
@property({ type: String }) facetAggregationKey?: string;
|
|
28
|
+
|
|
29
|
+
@property({ type: String }) fullQuery?: string;
|
|
30
|
+
|
|
31
|
+
@property({ type: Object }) modalManager?: any;
|
|
32
|
+
|
|
33
|
+
@property({ type: Object }) searchService?: SearchServiceInterface;
|
|
34
|
+
|
|
35
|
+
@property({ type: Object })
|
|
36
|
+
collectionNameCache?: CollectionNameCacheInterface;
|
|
37
|
+
|
|
38
|
+
@property({ type: Object })
|
|
39
|
+
languageCodeHandler?: LanguageCodeHandlerInterface;
|
|
40
|
+
|
|
41
|
+
@property({ type: Object }) selectedFacets?: SelectedFacets;
|
|
42
|
+
|
|
43
|
+
@state() aggregations?: Record<string, Aggregation>;
|
|
44
|
+
|
|
45
|
+
@state() castedBuckets?: Bucket[] = [];
|
|
46
|
+
|
|
47
|
+
@state() pageNumber = 1;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Facets are loading on popup
|
|
51
|
+
*/
|
|
52
|
+
@state() facetsLoading = true;
|
|
53
|
+
|
|
54
|
+
@state() paginationSize = 0;
|
|
55
|
+
|
|
56
|
+
private facetsPerPage = 60; // Q. how many items we want to have on popup view
|
|
57
|
+
|
|
58
|
+
updated(changed: PropertyValues) {
|
|
59
|
+
if (changed.has('facetKey')) {
|
|
60
|
+
this.facetsLoading = true;
|
|
61
|
+
this.pageNumber = 1;
|
|
62
|
+
|
|
63
|
+
this.updateSpecificFacets();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get specific facets data from search-service API based of currently query params
|
|
69
|
+
* - this.aggregations - hold result of search service and being used for further processing.
|
|
70
|
+
*/
|
|
71
|
+
async updateSpecificFacets(): Promise<void> {
|
|
72
|
+
const aggregations = {
|
|
73
|
+
advancedParams: [
|
|
74
|
+
{
|
|
75
|
+
field: this.facetAggregationKey as string,
|
|
76
|
+
size: 1000000, // todo - do we want to have all the records at once?
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const params: SearchParams = {
|
|
82
|
+
query: this.fullQuery as string,
|
|
83
|
+
fields: ['identifier'],
|
|
84
|
+
aggregations,
|
|
85
|
+
rows: 1, // todo - do we want server-side pagination with offset/page/limit flag?
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const results = await this.searchService?.search(params);
|
|
89
|
+
this.aggregations = results?.success?.response.aggregations as any;
|
|
90
|
+
|
|
91
|
+
// filter facets data to be rendered in modal-manager
|
|
92
|
+
await this.filterFacets();
|
|
93
|
+
this.facetsLoading = false;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Filter facets data stored in this.aggregations, eg.
|
|
98
|
+
* - we don't want to entertain year_histogram data since we using new date-picker
|
|
99
|
+
* - name of collections needs to be load inside cache using this.collectionNameCache
|
|
100
|
+
*
|
|
101
|
+
* this.castedBuckets - hold filtered facets data which will be render in modal
|
|
102
|
+
*/
|
|
103
|
+
async filterFacets(): Promise<void> {
|
|
104
|
+
Object.entries(this.aggregations ?? []).forEach(([key, buckets]) => {
|
|
105
|
+
if (key === 'year_histogram') return;
|
|
106
|
+
|
|
107
|
+
this.castedBuckets = buckets['buckets'] as Bucket[];
|
|
108
|
+
|
|
109
|
+
if (this.facetKey === 'collection') {
|
|
110
|
+
// for collections, we need to asynchronously load the collection name
|
|
111
|
+
// so we use the `async-collection-name` widget and for the rest, we have a static value to use
|
|
112
|
+
const collectionIds = this.castedBuckets?.map(option => option.key);
|
|
113
|
+
const collectionIdsArray = Array.from(
|
|
114
|
+
new Set(collectionIds)
|
|
115
|
+
) as string[];
|
|
116
|
+
this.collectionNameCache?.preloadIdentifiers(collectionIdsArray);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const { length } = Object.keys(this.castedBuckets as []);
|
|
121
|
+
this.paginationSize = Math.ceil(length / this.facetsPerPage);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private pageNumberClicked(e: CustomEvent<{ page: string }>) {
|
|
125
|
+
const page = e?.detail?.page;
|
|
126
|
+
if (page) {
|
|
127
|
+
this.pageNumber = Number(page);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private get getMoreFacetsTemplate() {
|
|
132
|
+
this.facetsLoading = false;
|
|
133
|
+
|
|
134
|
+
// render only items which will be visible as per this.facetsPerPage
|
|
135
|
+
const currentPageContent = this.castedBuckets?.slice(
|
|
136
|
+
(this.pageNumber - 1) * this.facetsPerPage,
|
|
137
|
+
this.pageNumber * this.facetsPerPage
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
return html`<ul class="facet-list">
|
|
141
|
+
${currentPageContent?.map(facet => {
|
|
142
|
+
let displayText = facet.key;
|
|
143
|
+
|
|
144
|
+
if (this.facetKey === 'language') {
|
|
145
|
+
displayText =
|
|
146
|
+
this.languageCodeHandler?.getLanguageNameFromCodeString(
|
|
147
|
+
displayText as string
|
|
148
|
+
) ?? displayText;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return html`
|
|
152
|
+
<li class="facet-row">
|
|
153
|
+
<label class="facet-info-display" title=${facet.key}>
|
|
154
|
+
<input
|
|
155
|
+
type="checkbox"
|
|
156
|
+
class="selected-facets"
|
|
157
|
+
.value="${facet.key}"
|
|
158
|
+
data-facet="${this.facetKey}"
|
|
159
|
+
@click=${(e: Event) => {
|
|
160
|
+
this.facetClicked(e);
|
|
161
|
+
}}
|
|
162
|
+
/>
|
|
163
|
+
<div class="facet-title">
|
|
164
|
+
${this.facetKey !== 'collection'
|
|
165
|
+
? html`${displayText}`
|
|
166
|
+
: html`<async-collection-name
|
|
167
|
+
.collectionNameCache=${this.collectionNameCache}
|
|
168
|
+
.identifier=${displayText}
|
|
169
|
+
placeholder="-"
|
|
170
|
+
></async-collection-name>`}
|
|
171
|
+
</div>
|
|
172
|
+
<div class="facet-count">${facet.doc_count}</div>
|
|
173
|
+
</label>
|
|
174
|
+
</li>
|
|
175
|
+
`;
|
|
176
|
+
})}
|
|
177
|
+
</ul>`;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private facetClicked(e: Event) {
|
|
181
|
+
const { selectedFacets } = this;
|
|
182
|
+
|
|
183
|
+
const target = e.target as HTMLInputElement;
|
|
184
|
+
const { checked, value } = target;
|
|
185
|
+
|
|
186
|
+
let newFacets: SelectedFacets;
|
|
187
|
+
if (selectedFacets) {
|
|
188
|
+
newFacets = {
|
|
189
|
+
...selectedFacets,
|
|
190
|
+
};
|
|
191
|
+
} else {
|
|
192
|
+
newFacets = defaultSelectedFacets;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (checked) {
|
|
196
|
+
newFacets[this.facetKey as keyof typeof newFacets][value] = 'selected';
|
|
197
|
+
} else {
|
|
198
|
+
delete newFacets[this.facetKey as keyof typeof newFacets][value];
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
this.selectedFacets = newFacets;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
private get loaderTemplate() {
|
|
205
|
+
return this.facetsLoading
|
|
206
|
+
? html`<div class="facets-loader">
|
|
207
|
+
<ia-activity-indicator .mode="processing"></ia-activity-indicator>
|
|
208
|
+
</div>`
|
|
209
|
+
: '';
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// render pagination if more then 1 page
|
|
213
|
+
private get facetsPaginationTemplate() {
|
|
214
|
+
return this.paginationSize > 1
|
|
215
|
+
? html`<more-facets-pagination
|
|
216
|
+
.size=${this.paginationSize}
|
|
217
|
+
@pageNumberClicked=${this.pageNumberClicked}
|
|
218
|
+
></more-facets-pagination>`
|
|
219
|
+
: nothing;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
private get facetsContentTemplate() {
|
|
223
|
+
return html`
|
|
224
|
+
<div class="facets-content">${this.getMoreFacetsTemplate}</div>
|
|
225
|
+
${this.paginationSize > 0
|
|
226
|
+
? html`${this.facetsPaginationTemplate}
|
|
227
|
+
<div class="footer">
|
|
228
|
+
<button
|
|
229
|
+
class="btn btn-cancel"
|
|
230
|
+
type="button"
|
|
231
|
+
@click=${this.cancelClick}
|
|
232
|
+
>
|
|
233
|
+
Cancel
|
|
234
|
+
</button>
|
|
235
|
+
<button
|
|
236
|
+
class="btn btn-submit"
|
|
237
|
+
type="button"
|
|
238
|
+
@click=${this.applySearchFacetsClicked}
|
|
239
|
+
>
|
|
240
|
+
Apply filters
|
|
241
|
+
</button>
|
|
242
|
+
</div>`
|
|
243
|
+
: html`No result found. please try again later.`}
|
|
244
|
+
`;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
render() {
|
|
248
|
+
return html`
|
|
249
|
+
<div id="more-facets-page">
|
|
250
|
+
<form>
|
|
251
|
+
${this.facetsLoading
|
|
252
|
+
? this.loaderTemplate
|
|
253
|
+
: this.facetsContentTemplate}
|
|
254
|
+
</form>
|
|
255
|
+
</div>
|
|
256
|
+
`;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private applySearchFacetsClicked() {
|
|
260
|
+
const event = new CustomEvent<SelectedFacets>('facetsChanged', {
|
|
261
|
+
detail: this.selectedFacets,
|
|
262
|
+
bubbles: true,
|
|
263
|
+
composed: true,
|
|
264
|
+
});
|
|
265
|
+
this.dispatchEvent(event);
|
|
266
|
+
this.modalManager?.closeModal();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private cancelClick() {
|
|
270
|
+
this.modalManager?.closeModal();
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
static get styles(): CSSResultGroup {
|
|
274
|
+
return css`
|
|
275
|
+
#more-facets-page {
|
|
276
|
+
margin-bottom: 2rem;
|
|
277
|
+
}
|
|
278
|
+
.modal-content {
|
|
279
|
+
background-color: #fefefe;
|
|
280
|
+
margin: auto;
|
|
281
|
+
padding: 0;
|
|
282
|
+
border: 1px solid #888;
|
|
283
|
+
width: 80%;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.facets-content {
|
|
287
|
+
-webkit-column-width: 25rem;
|
|
288
|
+
-moz-column-width: 25rem;
|
|
289
|
+
column-width: 25rem;
|
|
290
|
+
font-size: 1.2rem;
|
|
291
|
+
padding: 0 10px;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
ul.facet-list {
|
|
295
|
+
list-style: none;
|
|
296
|
+
margin: 0;
|
|
297
|
+
padding: 0;
|
|
298
|
+
}
|
|
299
|
+
ul.facet-list li {
|
|
300
|
+
margin-bottom: 2px;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.facet-row {
|
|
304
|
+
text-align: left;
|
|
305
|
+
}
|
|
306
|
+
.facet-row {
|
|
307
|
+
align-items: start;
|
|
308
|
+
font-weight: 500;
|
|
309
|
+
font-size: 1.2rem;
|
|
310
|
+
}
|
|
311
|
+
.facet-row input {
|
|
312
|
+
margin: 1px 5px 1px 0;
|
|
313
|
+
}
|
|
314
|
+
.facet-info-display {
|
|
315
|
+
display: flex;
|
|
316
|
+
flex: 1;
|
|
317
|
+
cursor: pointer;
|
|
318
|
+
}
|
|
319
|
+
.facet-title {
|
|
320
|
+
flex: 1;
|
|
321
|
+
}
|
|
322
|
+
.facet-count {
|
|
323
|
+
margin-left: 5px;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.page-number {
|
|
327
|
+
background: none;
|
|
328
|
+
border: 0;
|
|
329
|
+
cursor: pointer;
|
|
330
|
+
border-radius: 100%;
|
|
331
|
+
width: 25px;
|
|
332
|
+
height: 25px;
|
|
333
|
+
margin: 10px;
|
|
334
|
+
font-size: 1.4rem;
|
|
335
|
+
vertical-align: middle;
|
|
336
|
+
}
|
|
337
|
+
.current-page {
|
|
338
|
+
background: black;
|
|
339
|
+
color: white;
|
|
340
|
+
}
|
|
341
|
+
.facets-loader {
|
|
342
|
+
text-align: center;
|
|
343
|
+
margin-bottom: 2rem;
|
|
344
|
+
height: 7rem;
|
|
345
|
+
width: 7rem;
|
|
346
|
+
display: inline-block;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.btn {
|
|
350
|
+
border: none;
|
|
351
|
+
padding: 10px;
|
|
352
|
+
margin-bottom: 10px;
|
|
353
|
+
width: auto;
|
|
354
|
+
border-radius: 0.4rem;
|
|
355
|
+
cursor: pointer;
|
|
356
|
+
}
|
|
357
|
+
.btn-cancel {
|
|
358
|
+
background-color: #000;
|
|
359
|
+
color: white;
|
|
360
|
+
}
|
|
361
|
+
.btn-submit {
|
|
362
|
+
background-color: #194880;
|
|
363
|
+
color: white;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.footer {
|
|
367
|
+
margin-top: 10px;
|
|
368
|
+
}
|
|
369
|
+
`;
|
|
370
|
+
}
|
|
371
|
+
}
|