@internetarchive/collection-browser 1.14.9-alpha.2 → 1.14.9-alpha10
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/.editorconfig +29 -29
- package/.husky/pre-commit +4 -4
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/index.d.ts +9 -9
- package/dist/index.js +9 -9
- package/dist/src/app-root.d.ts +73 -72
- package/dist/src/app-root.js +501 -429
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
- package/dist/src/assets/img/icons/arrow-left.js +2 -2
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
- package/dist/src/assets/img/icons/arrow-right.js +2 -2
- package/dist/src/assets/img/icons/chevron.d.ts +2 -2
- package/dist/src/assets/img/icons/chevron.js +2 -2
- package/dist/src/assets/img/icons/contract.d.ts +2 -2
- package/dist/src/assets/img/icons/contract.js +2 -2
- package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
- package/dist/src/assets/img/icons/empty-query.js +2 -2
- package/dist/src/assets/img/icons/expand.d.ts +2 -2
- package/dist/src/assets/img/icons/expand.js +2 -2
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
- package/dist/src/assets/img/icons/eye-closed.js +2 -2
- package/dist/src/assets/img/icons/eye.d.ts +2 -2
- package/dist/src/assets/img/icons/eye.js +2 -2
- package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
- package/dist/src/assets/img/icons/favorite-filled.js +2 -2
- package/dist/src/assets/img/icons/login-required.d.ts +1 -1
- package/dist/src/assets/img/icons/login-required.js +2 -2
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/account.js +2 -2
- package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
- package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
- package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/data.js +2 -2
- package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
- package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/film.js +2 -2
- package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/images.js +2 -2
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
- package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/search.js +2 -2
- package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/software.js +2 -2
- package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
- package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
- package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/video.js +2 -2
- package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
- package/dist/src/assets/img/icons/mediatype/web.js +2 -2
- package/dist/src/assets/img/icons/null-result.d.ts +2 -2
- package/dist/src/assets/img/icons/null-result.js +2 -2
- package/dist/src/assets/img/icons/restricted.d.ts +1 -1
- package/dist/src/assets/img/icons/restricted.js +2 -2
- package/dist/src/assets/img/icons/reviews.d.ts +1 -1
- package/dist/src/assets/img/icons/reviews.js +2 -2
- package/dist/src/assets/img/icons/upload.d.ts +1 -1
- package/dist/src/assets/img/icons/upload.js +2 -2
- package/dist/src/assets/img/icons/views.d.ts +1 -1
- package/dist/src/assets/img/icons/views.js +2 -2
- package/dist/src/circular-activity-indicator.d.ts +5 -5
- package/dist/src/circular-activity-indicator.js +17 -17
- package/dist/src/collection-browser.d.ts +533 -533
- package/dist/src/collection-browser.js +1894 -1893
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.d.ts +30 -0
- package/dist/src/collection-facets/facet-row.js +245 -0
- package/dist/src/collection-facets/facet-row.js.map +1 -0
- package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
- package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
- package/dist/src/collection-facets/facets-template.d.ts +17 -20
- package/dist/src/collection-facets/facets-template.js +122 -264
- package/dist/src/collection-facets/facets-template.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +77 -77
- package/dist/src/collection-facets/more-facets-content.js +359 -359
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
- package/dist/src/collection-facets/more-facets-pagination.js +196 -196
- package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
- package/dist/src/collection-facets/toggle-switch.js +94 -94
- package/dist/src/collection-facets.d.ts +104 -104
- package/dist/src/collection-facets.js +506 -506
- package/dist/src/empty-placeholder.d.ts +23 -23
- package/dist/src/empty-placeholder.js +74 -74
- package/dist/src/expanded-date-picker.d.ts +43 -43
- package/dist/src/expanded-date-picker.js +109 -109
- package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
- package/dist/src/language-code-handler/language-code-handler.js +26 -26
- package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
- package/dist/src/language-code-handler/language-code-mapping.js +562 -562
- package/dist/src/manage/manage-bar.d.ts +26 -26
- package/dist/src/manage/manage-bar.js +53 -53
- package/dist/src/mediatype/mediatype-config.d.ts +3 -3
- package/dist/src/mediatype/mediatype-config.js +91 -91
- package/dist/src/models.d.ts +180 -164
- package/dist/src/models.js +269 -269
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +70 -70
- package/dist/src/restoration-state-handler.js +355 -355
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
- package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
- package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/compact.js +2 -2
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/list.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
- package/dist/src/sort-filter-bar/img/tile.js +2 -2
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +208 -208
- package/dist/src/sort-filter-bar/sort-filter-bar.js +637 -637
- package/dist/src/styles/item-image-styles.d.ts +8 -8
- package/dist/src/styles/item-image-styles.js +9 -9
- package/dist/src/styles/sr-only.d.ts +1 -1
- package/dist/src/styles/sr-only.js +2 -2
- package/dist/src/tiles/base-tile-component.d.ts +19 -19
- package/dist/src/tiles/base-tile-component.js +63 -63
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
- package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
- package/dist/src/tiles/grid/account-tile.d.ts +18 -18
- package/dist/src/tiles/grid/account-tile.js +72 -72
- package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
- package/dist/src/tiles/grid/collection-tile.js +80 -80
- package/dist/src/tiles/grid/item-tile.d.ts +27 -27
- package/dist/src/tiles/grid/item-tile.js +134 -134
- package/dist/src/tiles/grid/search-tile.d.ts +10 -10
- package/dist/src/tiles/grid/search-tile.js +51 -51
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
- package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
- package/dist/src/tiles/grid/tile-stats.js +48 -48
- package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
- package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
- package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
- package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
- package/dist/src/tiles/image-block.d.ts +17 -17
- package/dist/src/tiles/image-block.js +73 -73
- package/dist/src/tiles/item-image.d.ts +36 -36
- package/dist/src/tiles/item-image.js +127 -127
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
- package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
- package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
- package/dist/src/tiles/list/tile-list-compact.js +114 -114
- package/dist/src/tiles/list/tile-list.d.ts +46 -46
- package/dist/src/tiles/list/tile-list.js +302 -302
- package/dist/src/tiles/mediatype-icon.d.ts +9 -9
- package/dist/src/tiles/mediatype-icon.js +47 -47
- package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
- package/dist/src/tiles/overlay/icon-overlay.js +40 -40
- package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
- package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
- package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
- package/dist/src/tiles/overlay/text-overlay.js +42 -42
- package/dist/src/tiles/text-snippet-block.d.ts +27 -27
- package/dist/src/tiles/text-snippet-block.js +73 -73
- package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
- package/dist/src/tiles/tile-dispatcher.js +231 -231
- package/dist/src/tiles/tile-display-value-provider.d.ts +43 -43
- package/dist/src/tiles/tile-display-value-provider.js +80 -80
- package/dist/src/utils/analytics-events.d.ts +25 -25
- package/dist/src/utils/analytics-events.js +27 -27
- package/dist/src/utils/array-equals.d.ts +4 -4
- package/dist/src/utils/array-equals.js +10 -10
- package/dist/src/utils/format-count.d.ts +7 -7
- package/dist/src/utils/format-count.js +76 -76
- package/dist/src/utils/format-date.d.ts +2 -2
- package/dist/src/utils/format-date.js +25 -25
- package/dist/src/utils/format-unit-size.d.ts +2 -2
- package/dist/src/utils/format-unit-size.js +33 -33
- package/dist/src/utils/local-date-from-utc.d.ts +9 -9
- package/dist/src/utils/local-date-from-utc.js +15 -15
- package/dist/src/utils/sha1.d.ts +2 -2
- package/dist/src/utils/sha1.js +8 -8
- package/dist/test/collection-browser.test.d.ts +1 -1
- package/dist/test/collection-browser.test.js +1130 -1098
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
- package/dist/test/collection-facets/facet-row.test.js +235 -0
- package/dist/test/collection-facets/facet-row.test.js.map +1 -0
- package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
- package/dist/test/collection-facets/facets-template.test.js +110 -141
- package/dist/test/collection-facets/facets-template.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +133 -133
- package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
- package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
- package/dist/test/collection-facets/toggle-switch.test.js +73 -73
- package/dist/test/collection-facets.test.d.ts +2 -2
- package/dist/test/collection-facets.test.js +651 -682
- package/dist/test/collection-facets.test.js.map +1 -1
- package/dist/test/empty-placeholder.test.d.ts +1 -1
- package/dist/test/empty-placeholder.test.js +63 -63
- package/dist/test/expanded-date-picker.test.d.ts +1 -1
- package/dist/test/expanded-date-picker.test.js +95 -95
- package/dist/test/icon-overlay.test.d.ts +1 -1
- package/dist/test/icon-overlay.test.js +24 -24
- package/dist/test/image-block.test.d.ts +1 -1
- package/dist/test/image-block.test.js +48 -48
- package/dist/test/item-image.test.d.ts +1 -1
- package/dist/test/item-image.test.js +86 -86
- package/dist/test/manage/manage-bar.test.d.ts +1 -1
- package/dist/test/manage/manage-bar.test.js +72 -72
- package/dist/test/mediatype-config.test.d.ts +1 -1
- package/dist/test/mediatype-config.test.js +16 -16
- package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
- package/dist/test/mocks/mock-analytics-handler.js +15 -15
- package/dist/test/mocks/mock-collection-name-cache.d.ts +9 -9
- package/dist/test/mocks/mock-collection-name-cache.js +17 -17
- package/dist/test/mocks/mock-search-responses.d.ts +21 -21
- package/dist/test/mocks/mock-search-responses.js +709 -709
- package/dist/test/mocks/mock-search-service.d.ts +15 -15
- package/dist/test/mocks/mock-search-service.js +50 -50
- package/dist/test/restoration-state-handler.test.d.ts +1 -1
- package/dist/test/restoration-state-handler.test.js +270 -270
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
- package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
- package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +378 -378
- package/dist/test/text-overlay.test.d.ts +1 -1
- package/dist/test/text-overlay.test.js +48 -48
- package/dist/test/text-snippet-block.test.d.ts +1 -1
- package/dist/test/text-snippet-block.test.js +57 -57
- package/dist/test/tile-stats.test.d.ts +1 -1
- package/dist/test/tile-stats.test.js +33 -33
- package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/account-tile.test.js +76 -76
- package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/collection-tile.test.js +73 -73
- package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +254 -254
- package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/search-tile.test.js +51 -51
- package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
- package/dist/test/tiles/hover/hover-pane-controller.test.js +258 -258
- package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
- package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
- package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +242 -242
- package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
- package/dist/test/tiles/tile-dispatcher.test.js +94 -94
- package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
- package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
- package/dist/test/utils/array-equals.test.d.ts +1 -1
- package/dist/test/utils/array-equals.test.js +26 -26
- package/dist/test/utils/format-count.test.d.ts +1 -1
- package/dist/test/utils/format-count.test.js +23 -23
- package/dist/test/utils/format-date.test.d.ts +1 -1
- package/dist/test/utils/format-date.test.js +17 -17
- package/dist/test/utils/format-unit-size.test.d.ts +1 -1
- package/dist/test/utils/format-unit-size.test.js +17 -17
- package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
- package/dist/test/utils/local-date-from-utc.test.js +26 -26
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +2 -2
- package/renovate.json +6 -6
- package/src/app-root.ts +159 -82
- package/src/collection-browser.ts +25 -22
- package/src/collection-facets/facet-row.ts +274 -0
- package/src/collection-facets/facets-template.ts +49 -196
- package/src/models.ts +18 -2
- package/test/collection-browser.test.ts +36 -4
- package/test/collection-facets/facet-row.test.ts +328 -0
- package/test/collection-facets/facets-template.test.ts +72 -110
- package/test/collection-facets.test.ts +69 -101
- package/tsconfig.json +21 -21
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
- package/dist/src/selected-facets.d.ts +0 -67
- package/dist/src/selected-facets.js +0 -149
- package/dist/src/selected-facets.js.map +0 -1
- package/src/selected-facets.ts +0 -216
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
} from '../src/models';
|
|
18
18
|
import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
|
|
19
19
|
import { MockCollectionNameCache } from './mocks/mock-collection-name-cache';
|
|
20
|
+
import type { FacetRow } from '../src/collection-facets/facet-row';
|
|
21
|
+
import type { FacetsTemplate } from '../src/collection-facets/facets-template';
|
|
20
22
|
|
|
21
23
|
describe('Collection Facets', () => {
|
|
22
24
|
it('has loader', async () => {
|
|
@@ -210,10 +212,11 @@ describe('Collection Facets', () => {
|
|
|
210
212
|
|
|
211
213
|
const titleFacetRow = titleFacetGroup
|
|
212
214
|
?.querySelector('facets-template')
|
|
213
|
-
?.shadowRoot?.querySelector('
|
|
215
|
+
?.shadowRoot?.querySelector('facet-row') as FacetRow;
|
|
216
|
+
await titleFacetRow.updateComplete;
|
|
214
217
|
|
|
215
|
-
expect(titleFacetRow?.textContent?.trim()).to.satisfy(
|
|
216
|
-
/^foo\s*5$/.test(text)
|
|
218
|
+
expect(titleFacetRow?.shadowRoot?.textContent?.trim()).to.satisfy(
|
|
219
|
+
(text: string) => /^foo\s*5$/.test(text)
|
|
217
220
|
);
|
|
218
221
|
});
|
|
219
222
|
|
|
@@ -248,61 +251,6 @@ describe('Collection Facets', () => {
|
|
|
248
251
|
expect(facetGroups?.length).to.equal(2);
|
|
249
252
|
});
|
|
250
253
|
|
|
251
|
-
it('renders collection facets as links', async () => {
|
|
252
|
-
const el = await fixture<CollectionFacets>(
|
|
253
|
-
html`<collection-facets></collection-facets>`
|
|
254
|
-
);
|
|
255
|
-
|
|
256
|
-
const aggs: Record<string, Aggregation> = {
|
|
257
|
-
collection: new Aggregation({
|
|
258
|
-
buckets: [
|
|
259
|
-
{
|
|
260
|
-
key: 'foo',
|
|
261
|
-
doc_count: 5,
|
|
262
|
-
},
|
|
263
|
-
],
|
|
264
|
-
}),
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
el.aggregations = aggs;
|
|
268
|
-
await el.updateComplete;
|
|
269
|
-
|
|
270
|
-
const collectionName = el.shadowRoot
|
|
271
|
-
?.querySelector('facets-template')
|
|
272
|
-
?.shadowRoot?.querySelector('async-collection-name');
|
|
273
|
-
expect(collectionName?.parentElement).to.be.instanceOf(HTMLAnchorElement);
|
|
274
|
-
expect(collectionName?.parentElement?.getAttribute('href')).to.equal(
|
|
275
|
-
'/details/foo'
|
|
276
|
-
);
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
it('renders non-collection facets without links', async () => {
|
|
280
|
-
const el = await fixture<CollectionFacets>(
|
|
281
|
-
html`<collection-facets></collection-facets>`
|
|
282
|
-
);
|
|
283
|
-
|
|
284
|
-
const aggs: Record<string, Aggregation> = {
|
|
285
|
-
subject: new Aggregation({
|
|
286
|
-
buckets: [
|
|
287
|
-
{
|
|
288
|
-
key: 'foo',
|
|
289
|
-
doc_count: 5,
|
|
290
|
-
},
|
|
291
|
-
],
|
|
292
|
-
}),
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
el.aggregations = aggs;
|
|
296
|
-
await el.updateComplete;
|
|
297
|
-
|
|
298
|
-
const collectionName = el.shadowRoot
|
|
299
|
-
?.querySelector('facets-template')
|
|
300
|
-
?.shadowRoot?.querySelector('async-collection-name');
|
|
301
|
-
expect(collectionName?.parentElement).to.not.be.instanceOf(
|
|
302
|
-
HTMLAnchorElement
|
|
303
|
-
);
|
|
304
|
-
});
|
|
305
|
-
|
|
306
254
|
it('does not render suppressed collection facets', async () => {
|
|
307
255
|
const el = await fixture<CollectionFacets>(
|
|
308
256
|
html`<collection-facets></collection-facets>`
|
|
@@ -332,14 +280,11 @@ describe('Collection Facets', () => {
|
|
|
332
280
|
|
|
333
281
|
const collectionFacets = el.shadowRoot
|
|
334
282
|
?.querySelector('facets-template')
|
|
335
|
-
?.shadowRoot?.querySelectorAll('
|
|
283
|
+
?.shadowRoot?.querySelectorAll('facet-row') as ArrayLike<FacetRow>;
|
|
336
284
|
expect(collectionFacets?.length).to.equal(1);
|
|
337
285
|
|
|
338
286
|
// The first (and only) collection link should be for 'foo'
|
|
339
|
-
|
|
340
|
-
?.item(0)
|
|
341
|
-
.querySelector(`a[href='/details/foo']`);
|
|
342
|
-
expect(collectionLink).to.exist;
|
|
287
|
+
expect(collectionFacets[0].bucket?.key).to.equal('foo');
|
|
343
288
|
});
|
|
344
289
|
|
|
345
290
|
it('renders lending facets with human-readable names', async () => {
|
|
@@ -369,18 +314,24 @@ describe('Collection Facets', () => {
|
|
|
369
314
|
el.aggregations = aggs;
|
|
370
315
|
await el.updateComplete;
|
|
371
316
|
|
|
372
|
-
const facetsTemplate = el.shadowRoot?.querySelector(
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
317
|
+
const facetsTemplate = el.shadowRoot?.querySelector(
|
|
318
|
+
'facets-template'
|
|
319
|
+
) as FacetsTemplate;
|
|
320
|
+
await facetsTemplate?.updateComplete;
|
|
321
|
+
|
|
322
|
+
const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(
|
|
323
|
+
'facet-row'
|
|
324
|
+
) as ArrayLike<FacetRow>;
|
|
325
|
+
expect(lendingFacets?.length).to.equal(3);
|
|
326
|
+
|
|
327
|
+
expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(
|
|
328
|
+
/^Lending Library\s*3$/
|
|
378
329
|
);
|
|
379
|
-
expect(
|
|
380
|
-
|
|
330
|
+
expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(
|
|
331
|
+
/^Borrow 14 Days\s*2$/
|
|
381
332
|
);
|
|
382
|
-
expect(
|
|
383
|
-
|
|
333
|
+
expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(
|
|
334
|
+
/^Always Available\s*1$/
|
|
384
335
|
);
|
|
385
336
|
});
|
|
386
337
|
|
|
@@ -418,18 +369,24 @@ describe('Collection Facets', () => {
|
|
|
418
369
|
el.selectedFacets = selectedFacets;
|
|
419
370
|
await el.updateComplete;
|
|
420
371
|
|
|
421
|
-
const facetsTemplate = el.shadowRoot?.querySelector(
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
372
|
+
const facetsTemplate = el.shadowRoot?.querySelector(
|
|
373
|
+
'facets-template'
|
|
374
|
+
) as FacetsTemplate;
|
|
375
|
+
await facetsTemplate?.updateComplete;
|
|
376
|
+
|
|
377
|
+
const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(
|
|
378
|
+
'facet-row'
|
|
379
|
+
) as ArrayLike<FacetRow>;
|
|
380
|
+
expect(lendingFacets?.length).to.equal(3);
|
|
381
|
+
|
|
382
|
+
expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(
|
|
383
|
+
/^Lending Library\s*5$/
|
|
427
384
|
);
|
|
428
|
-
expect(
|
|
429
|
-
|
|
385
|
+
expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(
|
|
386
|
+
/^Borrow 14 Days\s*4$/
|
|
430
387
|
);
|
|
431
|
-
expect(
|
|
432
|
-
|
|
388
|
+
expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(
|
|
389
|
+
/^Always Available\s*3$/
|
|
433
390
|
);
|
|
434
391
|
});
|
|
435
392
|
|
|
@@ -476,18 +433,27 @@ describe('Collection Facets', () => {
|
|
|
476
433
|
el.aggregations = aggs;
|
|
477
434
|
await el.updateComplete;
|
|
478
435
|
|
|
479
|
-
const facetsTemplate = el.shadowRoot?.querySelector(
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
436
|
+
const facetsTemplate = el.shadowRoot?.querySelector(
|
|
437
|
+
'facets-template'
|
|
438
|
+
) as FacetsTemplate;
|
|
439
|
+
await facetsTemplate?.updateComplete;
|
|
440
|
+
await new Promise(res => {
|
|
441
|
+
setTimeout(res, 100);
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
const lendingFacets = facetsTemplate?.shadowRoot?.querySelectorAll(
|
|
445
|
+
'facet-row'
|
|
446
|
+
) as ArrayLike<FacetRow>;
|
|
447
|
+
expect(lendingFacets?.length).to.equal(3);
|
|
448
|
+
|
|
449
|
+
expect(lendingFacets[0].shadowRoot?.textContent?.trim()).to.match(
|
|
450
|
+
/^Lending Library\s*5$/
|
|
485
451
|
);
|
|
486
|
-
expect(
|
|
487
|
-
|
|
452
|
+
expect(lendingFacets[1].shadowRoot?.textContent?.trim()).to.match(
|
|
453
|
+
/^Borrow 14 Days\s*5$/
|
|
488
454
|
);
|
|
489
|
-
expect(
|
|
490
|
-
|
|
455
|
+
expect(lendingFacets[2].shadowRoot?.textContent?.trim()).to.match(
|
|
456
|
+
/^Always Available\s*4$/
|
|
491
457
|
);
|
|
492
458
|
});
|
|
493
459
|
|
|
@@ -586,10 +552,11 @@ describe('Collection Facets', () => {
|
|
|
586
552
|
await el.updateComplete;
|
|
587
553
|
|
|
588
554
|
const facetsTemplate = el.shadowRoot?.querySelector('facets-template');
|
|
589
|
-
const
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
expect(
|
|
555
|
+
const facetRows = facetsTemplate?.shadowRoot?.querySelectorAll(
|
|
556
|
+
'facet-row'
|
|
557
|
+
) as ArrayLike<FacetRow>;
|
|
558
|
+
expect(facetRows?.length).to.equal(6);
|
|
559
|
+
expect(facetRows?.[5]?.bucket?.key).to.equal('collection');
|
|
593
560
|
});
|
|
594
561
|
|
|
595
562
|
it('renders the mediatype:collection facet even when >=6 other mediatypes are selected', async () => {
|
|
@@ -652,10 +619,11 @@ describe('Collection Facets', () => {
|
|
|
652
619
|
await el.updateComplete;
|
|
653
620
|
|
|
654
621
|
const facetsTemplate = el.shadowRoot?.querySelector('facets-template');
|
|
655
|
-
const
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
expect(
|
|
622
|
+
const facetRows = facetsTemplate?.shadowRoot?.querySelectorAll(
|
|
623
|
+
'facet-row'
|
|
624
|
+
) as ArrayLike<FacetRow>;
|
|
625
|
+
expect(facetRows?.length).to.equal(8);
|
|
626
|
+
expect(facetRows?.[7]?.bucket?.key).to.equal('collection');
|
|
659
627
|
});
|
|
660
628
|
|
|
661
629
|
describe('More Facets', () => {
|
package/tsconfig.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "es2018",
|
|
4
|
-
"module": "esnext",
|
|
5
|
-
"moduleResolution": "node",
|
|
6
|
-
"noEmitOnError": true,
|
|
7
|
-
"lib": ["es2017", "dom"],
|
|
8
|
-
"strict": true,
|
|
9
|
-
"esModuleInterop": false,
|
|
10
|
-
"allowSyntheticDefaultImports": true,
|
|
11
|
-
"experimentalDecorators": true,
|
|
12
|
-
"importHelpers": true,
|
|
13
|
-
"outDir": "dist",
|
|
14
|
-
"sourceMap": true,
|
|
15
|
-
"inlineSources": true,
|
|
16
|
-
"rootDir": "./",
|
|
17
|
-
"declaration": true,
|
|
18
|
-
"importsNotUsedAsValues": "error"
|
|
19
|
-
},
|
|
20
|
-
"include": ["src", "test", "index.ts", "types"],
|
|
21
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es2018",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"noEmitOnError": true,
|
|
7
|
+
"lib": ["es2017", "dom"],
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": false,
|
|
10
|
+
"allowSyntheticDefaultImports": true,
|
|
11
|
+
"experimentalDecorators": true,
|
|
12
|
+
"importHelpers": true,
|
|
13
|
+
"outDir": "dist",
|
|
14
|
+
"sourceMap": true,
|
|
15
|
+
"inlineSources": true,
|
|
16
|
+
"rootDir": "./",
|
|
17
|
+
"declaration": true,
|
|
18
|
+
"importsNotUsedAsValues": "error"
|
|
19
|
+
},
|
|
20
|
+
"include": ["src", "test", "index.ts", "types"],
|
|
21
|
+
}
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
// import { hmrPlugin, presets } from '@open-wc/dev-server-hmr';
|
|
2
|
-
|
|
3
|
-
/** Use Hot Module replacement by adding --hmr to the start command */
|
|
4
|
-
const hmr = process.argv.includes('--hmr');
|
|
5
|
-
|
|
6
|
-
export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
|
|
7
|
-
nodeResolve: true,
|
|
8
|
-
open: '/',
|
|
9
|
-
watch: !hmr,
|
|
10
|
-
|
|
11
|
-
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
|
|
12
|
-
// esbuildTarget: 'auto'
|
|
13
|
-
|
|
14
|
-
/** Set appIndex to enable SPA routing */
|
|
15
|
-
// appIndex: 'demo/index.html',
|
|
16
|
-
|
|
17
|
-
/** Confgure bare import resolve plugin */
|
|
18
|
-
// nodeResolve: {
|
|
19
|
-
// exportConditions: ['browser', 'development']
|
|
20
|
-
// },
|
|
21
|
-
|
|
22
|
-
plugins: [
|
|
23
|
-
/** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
|
|
24
|
-
// hmr && hmrPlugin({ exclude: ['**/*/node_modules/**/*'], presets: [presets.litElement] }),
|
|
25
|
-
],
|
|
26
|
-
|
|
27
|
-
http2: true,
|
|
28
|
-
sslCert: './local.archive.org.cert',
|
|
29
|
-
sslKey: './local.archive.org.key',
|
|
30
|
-
});
|
|
1
|
+
// import { hmrPlugin, presets } from '@open-wc/dev-server-hmr';
|
|
2
|
+
|
|
3
|
+
/** Use Hot Module replacement by adding --hmr to the start command */
|
|
4
|
+
const hmr = process.argv.includes('--hmr');
|
|
5
|
+
|
|
6
|
+
export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
|
|
7
|
+
nodeResolve: true,
|
|
8
|
+
open: '/',
|
|
9
|
+
watch: !hmr,
|
|
10
|
+
|
|
11
|
+
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
|
|
12
|
+
// esbuildTarget: 'auto'
|
|
13
|
+
|
|
14
|
+
/** Set appIndex to enable SPA routing */
|
|
15
|
+
// appIndex: 'demo/index.html',
|
|
16
|
+
|
|
17
|
+
/** Confgure bare import resolve plugin */
|
|
18
|
+
// nodeResolve: {
|
|
19
|
+
// exportConditions: ['browser', 'development']
|
|
20
|
+
// },
|
|
21
|
+
|
|
22
|
+
plugins: [
|
|
23
|
+
/** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
|
|
24
|
+
// hmr && hmrPlugin({ exclude: ['**/*/node_modules/**/*'], presets: [presets.litElement] }),
|
|
25
|
+
],
|
|
26
|
+
|
|
27
|
+
http2: true,
|
|
28
|
+
sslCert: './local.archive.org.cert',
|
|
29
|
+
sslKey: './local.archive.org.key',
|
|
30
|
+
});
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
// import { playwrightLauncher } from '@web/test-runner-playwright';
|
|
2
|
-
|
|
3
|
-
const filteredLogs = ['Running in dev mode', 'lit-html is in dev mode'];
|
|
4
|
-
|
|
5
|
-
export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({
|
|
6
|
-
/** Test files to run */
|
|
7
|
-
files: 'dist/test/**/*.test.js',
|
|
8
|
-
|
|
9
|
-
/** Resolve bare module imports */
|
|
10
|
-
nodeResolve: {
|
|
11
|
-
exportConditions: ['browser', 'development'],
|
|
12
|
-
},
|
|
13
|
-
|
|
14
|
-
/** Filter out lit dev mode logs */
|
|
15
|
-
filterBrowserLogs(log) {
|
|
16
|
-
for (const arg of log.args) {
|
|
17
|
-
if (typeof arg === 'string' && filteredLogs.some(l => arg.includes(l))) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return true;
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
|
|
25
|
-
// esbuildTarget: 'auto',
|
|
26
|
-
|
|
27
|
-
/** Amount of browsers to run concurrently */
|
|
28
|
-
// concurrentBrowsers: 2,
|
|
29
|
-
|
|
30
|
-
/** Amount of test files per browser to test concurrently */
|
|
31
|
-
// concurrency: 1,
|
|
32
|
-
|
|
33
|
-
/** Browsers to run tests on */
|
|
34
|
-
// browsers: [
|
|
35
|
-
// playwrightLauncher({ product: 'chromium' }),
|
|
36
|
-
// playwrightLauncher({ product: 'firefox' }),
|
|
37
|
-
// playwrightLauncher({ product: 'webkit' }),
|
|
38
|
-
// ],
|
|
39
|
-
|
|
40
|
-
// See documentation for all available options
|
|
41
|
-
});
|
|
1
|
+
// import { playwrightLauncher } from '@web/test-runner-playwright';
|
|
2
|
+
|
|
3
|
+
const filteredLogs = ['Running in dev mode', 'lit-html is in dev mode'];
|
|
4
|
+
|
|
5
|
+
export default /** @type {import("@web/test-runner").TestRunnerConfig} */ ({
|
|
6
|
+
/** Test files to run */
|
|
7
|
+
files: 'dist/test/**/*.test.js',
|
|
8
|
+
|
|
9
|
+
/** Resolve bare module imports */
|
|
10
|
+
nodeResolve: {
|
|
11
|
+
exportConditions: ['browser', 'development'],
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
/** Filter out lit dev mode logs */
|
|
15
|
+
filterBrowserLogs(log) {
|
|
16
|
+
for (const arg of log.args) {
|
|
17
|
+
if (typeof arg === 'string' && filteredLogs.some(l => arg.includes(l))) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
/** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
|
|
25
|
+
// esbuildTarget: 'auto',
|
|
26
|
+
|
|
27
|
+
/** Amount of browsers to run concurrently */
|
|
28
|
+
// concurrentBrowsers: 2,
|
|
29
|
+
|
|
30
|
+
/** Amount of test files per browser to test concurrently */
|
|
31
|
+
// concurrency: 1,
|
|
32
|
+
|
|
33
|
+
/** Browsers to run tests on */
|
|
34
|
+
// browsers: [
|
|
35
|
+
// playwrightLauncher({ product: 'chromium' }),
|
|
36
|
+
// playwrightLauncher({ product: 'firefox' }),
|
|
37
|
+
// playwrightLauncher({ product: 'webkit' }),
|
|
38
|
+
// ],
|
|
39
|
+
|
|
40
|
+
// See documentation for all available options
|
|
41
|
+
});
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { type FacetBucket, type FacetGroup, type FacetOption, type FacetValue } from './models';
|
|
2
|
-
/**
|
|
3
|
-
* A record of all the facet buckets for a particular facet type, indexed by their bucket key
|
|
4
|
-
*/
|
|
5
|
-
export declare type FacetBucketsRecord = Record<FacetValue, FacetBucket>;
|
|
6
|
-
declare type SelectedFacetsModel = Record<FacetOption, FacetBucketsRecord>;
|
|
7
|
-
/**
|
|
8
|
-
* A class to hold, query, and manipulate state about selected/hidden facets.
|
|
9
|
-
*/
|
|
10
|
-
export declare class SelectedFacets implements SelectedFacetsModel {
|
|
11
|
-
readonly collection: FacetBucketsRecord;
|
|
12
|
-
readonly creator: FacetBucketsRecord;
|
|
13
|
-
readonly language: FacetBucketsRecord;
|
|
14
|
-
readonly lending: FacetBucketsRecord;
|
|
15
|
-
readonly mediatype: FacetBucketsRecord;
|
|
16
|
-
readonly subject: FacetBucketsRecord;
|
|
17
|
-
readonly year: FacetBucketsRecord;
|
|
18
|
-
constructor(initValues?: Partial<SelectedFacetsModel>);
|
|
19
|
-
/**
|
|
20
|
-
* Executes the given function on every facet bucket within the current SelectedFacets object.
|
|
21
|
-
* @param fn The function to execute for each facet bucket
|
|
22
|
-
*/
|
|
23
|
-
forEach(fn: (bucket: FacetBucket, bucketKey: FacetValue, facetType: FacetOption) => unknown): void;
|
|
24
|
-
/**
|
|
25
|
-
* Executes the given function on every facet type within the current SelectedFacets object.
|
|
26
|
-
* Similar to `SelectedFacets.forEach`, but operating on the full set of buckets for each type
|
|
27
|
-
* (rather than individual buckets).
|
|
28
|
-
* @param fn The function to execute for each facet type
|
|
29
|
-
*/
|
|
30
|
-
forEachFacetType(fn: (buckets: FacetBucketsRecord, facetType: FacetOption) => unknown): void;
|
|
31
|
-
/**
|
|
32
|
-
* Like `Array.some`, returns whether the given predicate function returns true for
|
|
33
|
-
* any of the facet buckets contained in this object.
|
|
34
|
-
* @param predicate Function returning a boolean for each bucket
|
|
35
|
-
* @returns Whether any of the facet buckets satisfy the predicate
|
|
36
|
-
*/
|
|
37
|
-
some(predicate: (bucket: FacetBucket, bucketKey: FacetValue, facetType: FacetOption) => boolean): boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Like `Array.every`, returns whether the given predicate function returns true for
|
|
40
|
-
* *all* of the facet buckets contained in this object.
|
|
41
|
-
* @param predicate Function returning a boolean for each bucket
|
|
42
|
-
* @returns Whether all of the facet buckets satisfy the predicate
|
|
43
|
-
*/
|
|
44
|
-
every(predicate: (bucket: FacetBucket, bucketKey: FacetValue, facetType: FacetOption) => boolean): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Returns a new SelectedFacets object deeply cloned from this one (same contents).
|
|
47
|
-
*/
|
|
48
|
-
clone(): SelectedFacets;
|
|
49
|
-
/**
|
|
50
|
-
* Returns a new SelectedFacets object cloned from this one with all of the given `otherFacets`
|
|
51
|
-
* applied overtop. Facets from this object will be overwritten by those in `otherFacets`
|
|
52
|
-
* that have the same facet type and bucket key.
|
|
53
|
-
*
|
|
54
|
-
* @param otherFacets The other SelectedFacets object to merge into this one.
|
|
55
|
-
*/
|
|
56
|
-
merge(otherFacets?: SelectedFacets): SelectedFacets;
|
|
57
|
-
/**
|
|
58
|
-
* Returns a new SelectedFacets object with facet buckets normalized, such that any
|
|
59
|
-
* buckets with a state of 'none' are removed entirely.
|
|
60
|
-
*/
|
|
61
|
-
normalize(): SelectedFacets;
|
|
62
|
-
/**
|
|
63
|
-
* Converts this SelectedFacets object into an array of equivalent FacetGroups.
|
|
64
|
-
*/
|
|
65
|
-
toFacetGroups(): FacetGroup[];
|
|
66
|
-
}
|
|
67
|
-
export {};
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { facetTitles, lendingFacetDisplayNames, } from './models';
|
|
2
|
-
const VALID_FACET_OPTIONS = new Set([
|
|
3
|
-
'collection',
|
|
4
|
-
'creator',
|
|
5
|
-
'language',
|
|
6
|
-
'lending',
|
|
7
|
-
'mediatype',
|
|
8
|
-
'subject',
|
|
9
|
-
'year',
|
|
10
|
-
]);
|
|
11
|
-
/**
|
|
12
|
-
* A class to hold, query, and manipulate state about selected/hidden facets.
|
|
13
|
-
*/
|
|
14
|
-
export class SelectedFacets {
|
|
15
|
-
constructor(initValues) {
|
|
16
|
-
this.collection = {};
|
|
17
|
-
this.creator = {};
|
|
18
|
-
this.language = {};
|
|
19
|
-
this.lending = {};
|
|
20
|
-
this.mediatype = {};
|
|
21
|
-
this.subject = {};
|
|
22
|
-
this.year = {};
|
|
23
|
-
if (initValues) {
|
|
24
|
-
for (const [facetType, buckets] of Object.entries(initValues)) {
|
|
25
|
-
if (VALID_FACET_OPTIONS.has(facetType)) {
|
|
26
|
-
for (const [bucketKey, bucket] of Object.entries(buckets)) {
|
|
27
|
-
this[facetType][bucketKey] = { ...bucket };
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Executes the given function on every facet bucket within the current SelectedFacets object.
|
|
35
|
-
* @param fn The function to execute for each facet bucket
|
|
36
|
-
*/
|
|
37
|
-
forEach(fn) {
|
|
38
|
-
for (const [facetType, buckets] of Object.entries(this)) {
|
|
39
|
-
for (const [bucketKey, bucket] of Object.entries(buckets)) {
|
|
40
|
-
fn(bucket, bucketKey, facetType);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Executes the given function on every facet type within the current SelectedFacets object.
|
|
46
|
-
* Similar to `SelectedFacets.forEach`, but operating on the full set of buckets for each type
|
|
47
|
-
* (rather than individual buckets).
|
|
48
|
-
* @param fn The function to execute for each facet type
|
|
49
|
-
*/
|
|
50
|
-
forEachFacetType(fn) {
|
|
51
|
-
for (const [facetType, buckets] of Object.entries(this)) {
|
|
52
|
-
fn(buckets, facetType);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Like `Array.some`, returns whether the given predicate function returns true for
|
|
57
|
-
* any of the facet buckets contained in this object.
|
|
58
|
-
* @param predicate Function returning a boolean for each bucket
|
|
59
|
-
* @returns Whether any of the facet buckets satisfy the predicate
|
|
60
|
-
*/
|
|
61
|
-
some(predicate) {
|
|
62
|
-
for (const [facetType, buckets] of Object.entries(this)) {
|
|
63
|
-
for (const [bucketKey, bucket] of Object.entries(buckets)) {
|
|
64
|
-
if (predicate(bucket, bucketKey, facetType))
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Like `Array.every`, returns whether the given predicate function returns true for
|
|
72
|
-
* *all* of the facet buckets contained in this object.
|
|
73
|
-
* @param predicate Function returning a boolean for each bucket
|
|
74
|
-
* @returns Whether all of the facet buckets satisfy the predicate
|
|
75
|
-
*/
|
|
76
|
-
every(predicate) {
|
|
77
|
-
for (const [facetType, buckets] of Object.entries(this)) {
|
|
78
|
-
for (const [bucketKey, bucket] of Object.entries(buckets)) {
|
|
79
|
-
if (!predicate(bucket, bucketKey, facetType))
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Returns a new SelectedFacets object deeply cloned from this one (same contents).
|
|
87
|
-
*/
|
|
88
|
-
clone() {
|
|
89
|
-
return new SelectedFacets(this);
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Returns a new SelectedFacets object cloned from this one with all of the given `otherFacets`
|
|
93
|
-
* applied overtop. Facets from this object will be overwritten by those in `otherFacets`
|
|
94
|
-
* that have the same facet type and bucket key.
|
|
95
|
-
*
|
|
96
|
-
* @param otherFacets The other SelectedFacets object to merge into this one.
|
|
97
|
-
*/
|
|
98
|
-
merge(otherFacets) {
|
|
99
|
-
const merged = this.clone();
|
|
100
|
-
otherFacets === null || otherFacets === void 0 ? void 0 : otherFacets.forEach((bucket, bucketKey, facetType) => {
|
|
101
|
-
merged[facetType][bucketKey] = { ...bucket };
|
|
102
|
-
});
|
|
103
|
-
return merged;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Returns a new SelectedFacets object with facet buckets normalized, such that any
|
|
107
|
-
* buckets with a state of 'none' are removed entirely.
|
|
108
|
-
*/
|
|
109
|
-
normalize() {
|
|
110
|
-
const normalized = this.clone();
|
|
111
|
-
normalized.forEach((bucket, bucketKey, facetType) => {
|
|
112
|
-
if (bucket.state === 'none') {
|
|
113
|
-
delete normalized[facetType][bucketKey];
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
return normalized;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Converts this SelectedFacets object into an array of equivalent FacetGroups.
|
|
120
|
-
*/
|
|
121
|
-
toFacetGroups() {
|
|
122
|
-
const facetGroups = {};
|
|
123
|
-
this.forEach((bucket, bucketKey, facetType) => {
|
|
124
|
-
var _a;
|
|
125
|
-
const title = facetTitles[facetType];
|
|
126
|
-
let displayText = bucketKey;
|
|
127
|
-
// For lending facets, convert the key to a more readable format
|
|
128
|
-
if (facetType === 'lending') {
|
|
129
|
-
displayText =
|
|
130
|
-
(_a = lendingFacetDisplayNames[bucketKey]) !== null && _a !== void 0 ? _a : bucketKey;
|
|
131
|
-
}
|
|
132
|
-
if (!facetGroups[facetType]) {
|
|
133
|
-
facetGroups[facetType] = {
|
|
134
|
-
title,
|
|
135
|
-
key: facetType,
|
|
136
|
-
buckets: [],
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
facetGroups[facetType].buckets.push({
|
|
140
|
-
displayText,
|
|
141
|
-
key: bucketKey,
|
|
142
|
-
count: bucket.count,
|
|
143
|
-
state: bucket.state,
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
return Object.values(facetGroups);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
//# sourceMappingURL=selected-facets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selected-facets.js","sourceRoot":"","sources":["../../src/selected-facets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n facetTitles,\n type FacetBucket,\n type FacetGroup,\n type FacetOption,\n type FacetValue,\n lendingFacetDisplayNames,\n LendingFacetKey,\n} from './models';\n\n/**\n * A record of all the facet buckets for a particular facet type, indexed by their bucket key\n */\nexport type FacetBucketsRecord = Record<FacetValue, FacetBucket>;\n\n// Implementing this model ensures that every facet type is accounted for\ntype SelectedFacetsModel = Record<FacetOption, FacetBucketsRecord>;\n\nconst VALID_FACET_OPTIONS: Set<FacetOption> = new Set([\n 'collection',\n 'creator',\n 'language',\n 'lending',\n 'mediatype',\n 'subject',\n 'year',\n]);\n\n/**\n * A class to hold, query, and manipulate state about selected/hidden facets.\n */\nexport class SelectedFacets implements SelectedFacetsModel {\n readonly collection: FacetBucketsRecord = {};\n\n readonly creator: FacetBucketsRecord = {};\n\n readonly language: FacetBucketsRecord = {};\n\n readonly lending: FacetBucketsRecord = {};\n\n readonly mediatype: FacetBucketsRecord = {};\n\n readonly subject: FacetBucketsRecord = {};\n\n readonly year: FacetBucketsRecord = {};\n\n constructor(initValues?: Partial<SelectedFacetsModel>) {\n if (initValues) {\n for (const [facetType, buckets] of Object.entries(initValues)) {\n if (VALID_FACET_OPTIONS.has(facetType as FacetOption)) {\n for (const [bucketKey, bucket] of Object.entries(buckets)) {\n this[facetType as FacetOption][bucketKey] = { ...bucket };\n }\n }\n }\n }\n }\n\n /**\n * Executes the given function on every facet bucket within the current SelectedFacets object.\n * @param fn The function to execute for each facet bucket\n */\n forEach(\n fn: (\n bucket: FacetBucket,\n bucketKey: FacetValue,\n facetType: FacetOption\n ) => unknown\n ): void {\n for (const [facetType, buckets] of Object.entries(\n this as SelectedFacetsModel\n )) {\n for (const [bucketKey, bucket] of Object.entries(buckets)) {\n fn(bucket, bucketKey, facetType as FacetOption);\n }\n }\n }\n\n /**\n * Executes the given function on every facet type within the current SelectedFacets object.\n * Similar to `SelectedFacets.forEach`, but operating on the full set of buckets for each type\n * (rather than individual buckets).\n * @param fn The function to execute for each facet type\n */\n forEachFacetType(\n fn: (buckets: FacetBucketsRecord, facetType: FacetOption) => unknown\n ): void {\n for (const [facetType, buckets] of Object.entries(\n this as SelectedFacetsModel\n )) {\n fn(buckets, facetType as FacetOption);\n }\n }\n\n /**\n * Like `Array.some`, returns whether the given predicate function returns true for\n * any of the facet buckets contained in this object.\n * @param predicate Function returning a boolean for each bucket\n * @returns Whether any of the facet buckets satisfy the predicate\n */\n some(\n predicate: (\n bucket: FacetBucket,\n bucketKey: FacetValue,\n facetType: FacetOption\n ) => boolean\n ): boolean {\n for (const [facetType, buckets] of Object.entries(\n this as SelectedFacetsModel\n )) {\n for (const [bucketKey, bucket] of Object.entries(buckets)) {\n if (predicate(bucket, bucketKey, facetType as FacetOption)) return true;\n }\n }\n\n return false;\n }\n\n /**\n * Like `Array.every`, returns whether the given predicate function returns true for\n * *all* of the facet buckets contained in this object.\n * @param predicate Function returning a boolean for each bucket\n * @returns Whether all of the facet buckets satisfy the predicate\n */\n every(\n predicate: (\n bucket: FacetBucket,\n bucketKey: FacetValue,\n facetType: FacetOption\n ) => boolean\n ): boolean {\n for (const [facetType, buckets] of Object.entries(\n this as SelectedFacetsModel\n )) {\n for (const [bucketKey, bucket] of Object.entries(buckets)) {\n if (!predicate(bucket, bucketKey, facetType as FacetOption))\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Returns a new SelectedFacets object deeply cloned from this one (same contents).\n */\n clone(): SelectedFacets {\n return new SelectedFacets(this);\n }\n\n /**\n * Returns a new SelectedFacets object cloned from this one with all of the given `otherFacets`\n * applied overtop. Facets from this object will be overwritten by those in `otherFacets`\n * that have the same facet type and bucket key.\n *\n * @param otherFacets The other SelectedFacets object to merge into this one.\n */\n merge(otherFacets?: SelectedFacets): SelectedFacets {\n const merged = this.clone();\n otherFacets?.forEach((bucket, bucketKey, facetType) => {\n merged[facetType][bucketKey] = { ...bucket };\n });\n\n return merged;\n }\n\n /**\n * Returns a new SelectedFacets object with facet buckets normalized, such that any\n * buckets with a state of 'none' are removed entirely.\n */\n normalize(): SelectedFacets {\n const normalized = this.clone();\n normalized.forEach((bucket, bucketKey, facetType) => {\n if (bucket.state === 'none') {\n delete normalized[facetType][bucketKey];\n }\n });\n\n return normalized;\n }\n\n /**\n * Converts this SelectedFacets object into an array of equivalent FacetGroups.\n */\n toFacetGroups(): FacetGroup[] {\n const facetGroups: Record<string, FacetGroup> = {};\n\n this.forEach((bucket, bucketKey, facetType) => {\n const title = facetTitles[facetType];\n let displayText = bucketKey;\n\n // For lending facets, convert the key to a more readable format\n if (facetType === 'lending') {\n displayText =\n lendingFacetDisplayNames[bucketKey as LendingFacetKey] ?? bucketKey;\n }\n\n if (!facetGroups[facetType]) {\n facetGroups[facetType] = {\n title,\n key: facetType,\n buckets: [],\n };\n }\n\n facetGroups[facetType].buckets.push({\n displayText,\n key: bucketKey,\n count: bucket.count,\n state: bucket.state,\n });\n });\n\n return Object.values(facetGroups);\n }\n}\n"]}
|