@internetarchive/collection-browser 0.3.3-alpha.4 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +29 -29
- package/.github/workflows/ci.yml +26 -26
- package/.github/workflows/gh-pages-main.yml +39 -39
- package/.github/workflows/npm-publish.yml +39 -39
- package/.github/workflows/pr-preview.yml +38 -38
- 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 +43 -44
- package/dist/src/app-root.js +233 -242
- 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/empty-query.d.ts +2 -2
- package/dist/src/assets/img/icons/empty-query.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/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 +247 -247
- package/dist/src/collection-browser.js +1055 -1073
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facets-template.d.ts +16 -16
- package/dist/src/collection-facets/facets-template.js +125 -125
- package/dist/src/collection-facets/more-facets-content.d.ts +76 -74
- package/dist/src/collection-facets/more-facets-content.js +349 -330
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
- package/dist/src/collection-facets/more-facets-pagination.js +192 -192
- package/dist/src/collection-facets.d.ts +75 -73
- package/dist/src/collection-facets.js +370 -359
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/empty-placeholder.d.ts +11 -11
- package/dist/src/empty-placeholder.js +42 -42
- 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/mediatype/mediatype-config.d.ts +3 -3
- package/dist/src/mediatype/mediatype-config.js +85 -85
- package/dist/src/models.d.ts +97 -97
- package/dist/src/models.js +100 -100
- package/dist/src/restoration-state-handler.d.ts +45 -46
- package/dist/src/restoration-state-handler.js +220 -230
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -9
- package/dist/src/sort-filter-bar/alpha-bar.js +41 -41
- 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-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 +107 -107
- package/dist/src/sort-filter-bar/sort-filter-bar.js +423 -423
- package/dist/src/styles/item-image-styles.d.ts +8 -8
- package/dist/src/styles/item-image-styles.js +9 -9
- 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 +8 -8
- package/dist/src/tiles/grid/account-tile.js +20 -20
- package/dist/src/tiles/grid/collection-tile.d.ts +7 -7
- package/dist/src/tiles/grid/collection-tile.js +23 -23
- package/dist/src/tiles/grid/item-tile.d.ts +24 -24
- package/dist/src/tiles/grid/item-tile.js +87 -87
- package/dist/src/tiles/grid/tile-stats.d.ts +10 -10
- package/dist/src/tiles/grid/tile-stats.js +35 -35
- package/dist/src/tiles/image-block.d.ts +17 -17
- package/dist/src/tiles/image-block.js +69 -69
- package/dist/src/tiles/item-image.d.ts +31 -31
- package/dist/src/tiles/item-image.js +103 -103
- package/dist/src/tiles/list/account-label.d.ts +1 -1
- package/dist/src/tiles/list/account-label.js +6 -6
- package/dist/src/tiles/list/date-label.d.ts +1 -1
- package/dist/src/tiles/list/date-label.js +12 -12
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
- package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
- package/dist/src/tiles/list/tile-list-compact.d.ts +20 -20
- package/dist/src/tiles/list/tile-list-compact.js +87 -87
- package/dist/src/tiles/list/tile-list.d.ts +50 -50
- package/dist/src/tiles/list/tile-list.js +264 -264
- 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 +7 -7
- package/dist/src/tiles/overlay/icon-overlay.js +30 -30
- package/dist/src/tiles/overlay/text-overlay.d.ts +8 -8
- package/dist/src/tiles/overlay/text-overlay.js +31 -31
- package/dist/src/tiles/text-snippet-block.d.ts +29 -29
- package/dist/src/tiles/text-snippet-block.js +81 -81
- package/dist/src/tiles/tile-dispatcher.d.ts +36 -36
- package/dist/src/tiles/tile-dispatcher.js +128 -128
- package/dist/src/utils/analytics-events.d.ts +22 -18
- package/dist/src/utils/analytics-events.js +24 -20
- package/dist/src/utils/analytics-events.js.map +1 -1
- 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 +23 -23
- package/dist/test/collection-browser.test.d.ts +1 -1
- package/dist/test/collection-browser.test.js +330 -356
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
- package/dist/test/collection-facets/facets-template.test.js +62 -62
- package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +117 -92
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
- 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.test.d.ts +2 -2
- package/dist/test/collection-facets.test.js +471 -421
- 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 +33 -33
- 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 +56 -56
- 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 +7 -7
- package/dist/test/mocks/mock-collection-name-cache.js +13 -13
- package/dist/test/mocks/mock-search-responses.d.ts +5 -5
- package/dist/test/mocks/mock-search-responses.js +103 -103
- package/dist/test/mocks/mock-search-service.d.ts +13 -13
- package/dist/test/mocks/mock-search-service.js +25 -25
- package/dist/test/restoration-state-handler.test.d.ts +1 -1
- package/dist/test/restoration-state-handler.test.js +117 -117
- 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 +113 -113
- package/dist/test/text-overlay.test.d.ts +1 -1
- package/dist/test/text-overlay.test.js +41 -41
- 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/item-tile.test.d.ts +1 -1
- package/dist/test/tiles/grid/item-tile.test.js +107 -107
- package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list-compact.test.js +26 -26
- package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
- package/dist/test/tiles/list/tile-list.test.js +36 -36
- 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/index.html +24 -24
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +115 -115
- package/renovate.json +6 -6
- package/src/app-root.ts +1 -12
- package/src/collection-browser.ts +7 -43
- package/src/collection-facets/more-facets-content.ts +27 -3
- package/src/collection-facets.ts +16 -1
- package/src/restoration-state-handler.ts +1 -19
- package/src/utils/analytics-events.ts +4 -0
- package/test/collection-browser.test.ts +2 -31
- package/test/collection-facets/more-facets-content.test.ts +42 -10
- package/test/collection-facets.test.ts +62 -1
- package/tsconfig.json +21 -21
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +41 -41
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
} from '@internetarchive/search-service';
|
|
21
21
|
import type { CollectionNameCacheInterface } from '@internetarchive/collection-name-cache';
|
|
22
22
|
import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
23
|
+
import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
|
|
23
24
|
import {
|
|
24
25
|
SelectedFacets,
|
|
25
26
|
FacetGroup,
|
|
@@ -31,12 +32,16 @@ import type { LanguageCodeHandlerInterface } from '../language-code-handler/lang
|
|
|
31
32
|
import '@internetarchive/ia-activity-indicator/ia-activity-indicator';
|
|
32
33
|
import './more-facets-pagination';
|
|
33
34
|
import './facets-template';
|
|
35
|
+
import {
|
|
36
|
+
analyticsActions,
|
|
37
|
+
analyticsCategories,
|
|
38
|
+
} from '../utils/analytics-events';
|
|
34
39
|
|
|
35
40
|
@customElement('more-facets-content')
|
|
36
41
|
export class MoreFacetsContent extends LitElement {
|
|
37
|
-
@property({ type: String }) facetKey?:
|
|
42
|
+
@property({ type: String }) facetKey?: FacetOption;
|
|
38
43
|
|
|
39
|
-
@property({ type: String }) facetAggregationKey?:
|
|
44
|
+
@property({ type: String }) facetAggregationKey?: FacetOption;
|
|
40
45
|
|
|
41
46
|
@property({ type: String }) fullQuery?: string;
|
|
42
47
|
|
|
@@ -54,7 +59,10 @@ export class MoreFacetsContent extends LitElement {
|
|
|
54
59
|
|
|
55
60
|
@property({ type: Object }) selectedFacets?: SelectedFacets;
|
|
56
61
|
|
|
57
|
-
@property({ type: String }) sortedBy
|
|
62
|
+
@property({ type: String }) sortedBy: 'count' | 'alpha' = 'count';
|
|
63
|
+
|
|
64
|
+
@property({ type: Object, attribute: false })
|
|
65
|
+
analyticsHandler?: AnalyticsManagerInterface;
|
|
58
66
|
|
|
59
67
|
@state() aggregations?: Record<string, Aggregation>;
|
|
60
68
|
|
|
@@ -136,6 +144,12 @@ export class MoreFacetsContent extends LitElement {
|
|
|
136
144
|
if (page) {
|
|
137
145
|
this.pageNumber = Number(page);
|
|
138
146
|
}
|
|
147
|
+
|
|
148
|
+
this.analyticsHandler?.sendEventNoSampling({
|
|
149
|
+
category: analyticsCategories.default,
|
|
150
|
+
action: analyticsActions.moreFacetsPageChange,
|
|
151
|
+
label: `${this.pageNumber}`,
|
|
152
|
+
});
|
|
139
153
|
}
|
|
140
154
|
|
|
141
155
|
/**
|
|
@@ -419,10 +433,20 @@ export class MoreFacetsContent extends LitElement {
|
|
|
419
433
|
});
|
|
420
434
|
this.dispatchEvent(event);
|
|
421
435
|
this.modalManager?.closeModal();
|
|
436
|
+
this.analyticsHandler?.sendEventNoSampling({
|
|
437
|
+
category: analyticsCategories.default,
|
|
438
|
+
action: `${analyticsActions.applyMoreFacetsModal}`,
|
|
439
|
+
label: `${this.facetKey}`,
|
|
440
|
+
});
|
|
422
441
|
}
|
|
423
442
|
|
|
424
443
|
private cancelClick() {
|
|
425
444
|
this.modalManager?.closeModal();
|
|
445
|
+
this.analyticsHandler?.sendEventNoSampling({
|
|
446
|
+
category: analyticsCategories.default,
|
|
447
|
+
action: analyticsActions.closeMoreFacetsModal,
|
|
448
|
+
label: `${this.facetKey}`,
|
|
449
|
+
});
|
|
426
450
|
}
|
|
427
451
|
|
|
428
452
|
static get styles(): CSSResultGroup {
|
package/src/collection-facets.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
ModalConfig,
|
|
23
23
|
ModalManagerInterface,
|
|
24
24
|
} from '@internetarchive/modal-manager';
|
|
25
|
+
import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
|
|
25
26
|
import chevronIcon from './assets/img/icons/chevron';
|
|
26
27
|
import {
|
|
27
28
|
FacetOption,
|
|
@@ -37,6 +38,10 @@ import {
|
|
|
37
38
|
import type { LanguageCodeHandlerInterface } from './language-code-handler/language-code-handler';
|
|
38
39
|
import './collection-facets/more-facets-content';
|
|
39
40
|
import './collection-facets/facets-template';
|
|
41
|
+
import {
|
|
42
|
+
analyticsActions,
|
|
43
|
+
analyticsCategories,
|
|
44
|
+
} from './utils/analytics-events';
|
|
40
45
|
|
|
41
46
|
@customElement('collection-facets')
|
|
42
47
|
export class CollectionFacets extends LitElement {
|
|
@@ -66,7 +71,11 @@ export class CollectionFacets extends LitElement {
|
|
|
66
71
|
|
|
67
72
|
@property({ type: String }) fullQuery?: string;
|
|
68
73
|
|
|
69
|
-
@property({ type: Object })
|
|
74
|
+
@property({ type: Object, attribute: false })
|
|
75
|
+
modalManager?: ModalManagerInterface;
|
|
76
|
+
|
|
77
|
+
@property({ type: Object, attribute: false })
|
|
78
|
+
analyticsHandler?: AnalyticsManagerInterface;
|
|
70
79
|
|
|
71
80
|
@property({ type: Object })
|
|
72
81
|
languageCodeHandler?: LanguageCodeHandlerInterface;
|
|
@@ -429,6 +438,11 @@ export class CollectionFacets extends LitElement {
|
|
|
429
438
|
class="more-link"
|
|
430
439
|
@click=${() => {
|
|
431
440
|
this.showMoreFacetsModal(facetGroup, 'count');
|
|
441
|
+
this.analyticsHandler?.sendEventNoSampling({
|
|
442
|
+
category: analyticsCategories.default,
|
|
443
|
+
action: analyticsActions.showMoreFacetsModal,
|
|
444
|
+
label: facetGroup.key,
|
|
445
|
+
});
|
|
432
446
|
this.dispatchEvent(
|
|
433
447
|
new CustomEvent('showMoreFacets', { detail: facetGroup.key })
|
|
434
448
|
);
|
|
@@ -446,6 +460,7 @@ export class CollectionFacets extends LitElement {
|
|
|
446
460
|
|
|
447
461
|
const customModalContent = html`
|
|
448
462
|
<more-facets-content
|
|
463
|
+
.analyticsHandler=${this.analyticsHandler}
|
|
449
464
|
.facetKey=${facetGroup.key}
|
|
450
465
|
.facetAggregationKey=${facetAggrKey}
|
|
451
466
|
.fullQuery=${this.fullQuery}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SearchType,
|
|
3
|
-
SortDirection,
|
|
4
|
-
SortParam,
|
|
5
|
-
} from '@internetarchive/search-service';
|
|
1
|
+
import type { SortDirection, SortParam } from '@internetarchive/search-service';
|
|
6
2
|
import { getCookie, setCookie } from 'typescript-cookie';
|
|
7
3
|
import {
|
|
8
4
|
MetadataFieldToSortField,
|
|
@@ -18,7 +14,6 @@ import {
|
|
|
18
14
|
|
|
19
15
|
export interface RestorationState {
|
|
20
16
|
displayMode?: CollectionDisplayMode;
|
|
21
|
-
searchType?: SearchType;
|
|
22
17
|
sortParam?: SortParam;
|
|
23
18
|
selectedSort?: SortField;
|
|
24
19
|
sortDirection?: SortDirection;
|
|
@@ -92,20 +87,12 @@ export class RestorationStateHandler
|
|
|
92
87
|
private persistQueryStateToUrl(state: RestorationState) {
|
|
93
88
|
const url = new URL(window.location.href);
|
|
94
89
|
const { searchParams } = url;
|
|
95
|
-
searchParams.delete('sin');
|
|
96
90
|
searchParams.delete('sort');
|
|
97
91
|
searchParams.delete('query');
|
|
98
92
|
searchParams.delete('page');
|
|
99
93
|
searchParams.delete('and[]');
|
|
100
94
|
searchParams.delete('not[]');
|
|
101
95
|
|
|
102
|
-
if (state.searchType) {
|
|
103
|
-
searchParams.set(
|
|
104
|
-
'sin',
|
|
105
|
-
state.searchType === SearchType.FULLTEXT ? 'TXT' : ''
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
96
|
if (state.sortParam) {
|
|
110
97
|
const prefix = state.sortParam.direction === 'desc' ? '-' : '';
|
|
111
98
|
searchParams.set('sort', `${prefix}${state.sortParam.field}`);
|
|
@@ -168,7 +155,6 @@ export class RestorationStateHandler
|
|
|
168
155
|
|
|
169
156
|
private loadQueryStateFromUrl(): RestorationState {
|
|
170
157
|
const url = new URL(window.location.href);
|
|
171
|
-
const searchInside = url.searchParams.get('sin');
|
|
172
158
|
const pageNumber = url.searchParams.get('page');
|
|
173
159
|
const searchQuery = url.searchParams.get('query');
|
|
174
160
|
const sortQuery = url.searchParams.get('sort');
|
|
@@ -187,10 +173,6 @@ export class RestorationStateHandler
|
|
|
187
173
|
},
|
|
188
174
|
};
|
|
189
175
|
|
|
190
|
-
if (searchInside) {
|
|
191
|
-
restorationState.searchType =
|
|
192
|
-
searchInside === 'TXT' ? SearchType.FULLTEXT : undefined; // No explicit metadata sin
|
|
193
|
-
}
|
|
194
176
|
if (pageNumber) {
|
|
195
177
|
const parsed = parseInt(pageNumber, 10);
|
|
196
178
|
restorationState.currentPage = parsed;
|
|
@@ -16,4 +16,8 @@ export enum analyticsActions {
|
|
|
16
16
|
facetNegativeDeselected = 'facetNegativeDeselected',
|
|
17
17
|
histogramChanged = 'histogramChanged',
|
|
18
18
|
resultSelected = 'resultSelected',
|
|
19
|
+
moreFacetsPageChange = 'moreFacetsPageChange',
|
|
20
|
+
showMoreFacetsModal = 'showMoreFacetsModal',
|
|
21
|
+
closeMoreFacetsModal = 'closeMoreFacetsModal',
|
|
22
|
+
applyMoreFacetsModal = 'applyMoreFacetsModal',
|
|
19
23
|
}
|
|
@@ -18,21 +18,6 @@ import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
|
|
|
18
18
|
import { analyticsCategories } from '../src/utils/analytics-events';
|
|
19
19
|
|
|
20
20
|
describe('Collection Browser', () => {
|
|
21
|
-
beforeEach(async () => {
|
|
22
|
-
// Apparently query params set by one test can bleed into other tests.
|
|
23
|
-
// Since collection browser restores its state from certain query params, we need
|
|
24
|
-
// to clear these before each test to ensure they run in isolation from one another.
|
|
25
|
-
const url = new URL(window.location.href);
|
|
26
|
-
const { searchParams } = url;
|
|
27
|
-
searchParams.delete('sin');
|
|
28
|
-
searchParams.delete('sort');
|
|
29
|
-
searchParams.delete('query');
|
|
30
|
-
searchParams.delete('page');
|
|
31
|
-
searchParams.delete('and[]');
|
|
32
|
-
searchParams.delete('not[]');
|
|
33
|
-
window.history.replaceState({}, '', url);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
21
|
it('clear existing filter for facets & sort-bar', async () => {
|
|
37
22
|
const el = await fixture<CollectionBrowser>(
|
|
38
23
|
html`<collection-browser></collection-browser>`
|
|
@@ -385,11 +370,8 @@ describe('Collection Browser', () => {
|
|
|
385
370
|
});
|
|
386
371
|
|
|
387
372
|
it('sets sort properties when user changes sort', async () => {
|
|
388
|
-
const searchService = new MockSearchService();
|
|
389
373
|
const el = await fixture<CollectionBrowser>(
|
|
390
|
-
html`<collection-browser
|
|
391
|
-
.searchService=${searchService}
|
|
392
|
-
></collection-browser>`
|
|
374
|
+
html`<collection-browser></collection-browser>`
|
|
393
375
|
);
|
|
394
376
|
|
|
395
377
|
expect(el.selectedSort).to.equal(SortField.relevance);
|
|
@@ -415,17 +397,10 @@ describe('Collection Browser', () => {
|
|
|
415
397
|
});
|
|
416
398
|
|
|
417
399
|
it('scrolls to page', async () => {
|
|
418
|
-
const searchService = new MockSearchService();
|
|
419
400
|
const el = await fixture<CollectionBrowser>(
|
|
420
|
-
html`<collection-browser
|
|
421
|
-
.searchService=${searchService}
|
|
422
|
-
></collection-browser>`
|
|
401
|
+
html`<collection-browser></collection-browser>`
|
|
423
402
|
);
|
|
424
403
|
|
|
425
|
-
// Infinite scroller won't exist unless there's a base query
|
|
426
|
-
el.baseQuery = 'collection:foo';
|
|
427
|
-
await el.updateComplete;
|
|
428
|
-
|
|
429
404
|
const infiniteScroller = el.shadowRoot?.querySelector(
|
|
430
405
|
'infinite-scroller'
|
|
431
406
|
) as InfiniteScroller;
|
|
@@ -460,10 +435,6 @@ describe('Collection Browser', () => {
|
|
|
460
435
|
);
|
|
461
436
|
const infiniteScrollerRefreshSpy = sinon.spy();
|
|
462
437
|
|
|
463
|
-
// Infinite scroller won't exist unless there's a base query
|
|
464
|
-
el.baseQuery = 'collection:foo';
|
|
465
|
-
await el.updateComplete;
|
|
466
|
-
|
|
467
438
|
const infiniteScroller = el.shadowRoot?.querySelector('infinite-scroller');
|
|
468
439
|
(infiniteScroller as InfiniteScroller).reload = infiniteScrollerRefreshSpy;
|
|
469
440
|
expect(infiniteScrollerRefreshSpy.called).to.be.false;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/* eslint-disable import/no-duplicates */
|
|
2
|
-
import { expect, fixture
|
|
2
|
+
import { expect, fixture } from '@open-wc/testing';
|
|
3
3
|
import { html } from 'lit';
|
|
4
4
|
import { Aggregation } from '@internetarchive/search-service';
|
|
5
5
|
import type { MoreFacetsContent } from '../../src/collection-facets/more-facets-content';
|
|
6
6
|
import '../../src/collection-facets/more-facets-content';
|
|
7
7
|
import { MockSearchService } from '../mocks/mock-search-service';
|
|
8
|
+
import { MockAnalyticsHandler } from '../mocks/mock-analytics-handler';
|
|
8
9
|
|
|
9
10
|
const selectedFacetsGroup = {
|
|
10
11
|
title: 'Media Type',
|
|
@@ -126,21 +127,52 @@ describe('More facets content', () => {
|
|
|
126
127
|
expect(bucket?.count).to.equal(5);
|
|
127
128
|
});
|
|
128
129
|
|
|
129
|
-
it('
|
|
130
|
-
const
|
|
130
|
+
it('cancel button clicked event', async () => {
|
|
131
|
+
const mockAnalyticsHandler = new MockAnalyticsHandler();
|
|
131
132
|
|
|
132
133
|
const el = await fixture<MoreFacetsContent>(
|
|
133
134
|
html`<more-facets-content
|
|
134
|
-
.
|
|
135
|
+
.analyticsHandler=${mockAnalyticsHandler}
|
|
135
136
|
></more-facets-content>`
|
|
136
137
|
);
|
|
137
138
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
el.facetsLoading = false;
|
|
140
|
+
el.paginationSize = 5;
|
|
141
|
+
await el.updateComplete;
|
|
142
|
+
|
|
143
|
+
// select cancel button
|
|
144
|
+
const cancelButton = el.shadowRoot?.querySelector(
|
|
145
|
+
'.footer > .btn-cancel'
|
|
146
|
+
) as HTMLButtonElement;
|
|
147
|
+
cancelButton?.click();
|
|
148
|
+
|
|
149
|
+
expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
|
|
150
|
+
expect(mockAnalyticsHandler.callAction).to.equal('closeMoreFacetsModal');
|
|
151
|
+
expect(mockAnalyticsHandler.callLabel).to.equal('undefined');
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it('facet apply button clicked event', async () => {
|
|
155
|
+
const mockAnalyticsHandler = new MockAnalyticsHandler();
|
|
156
|
+
|
|
157
|
+
const el = await fixture<MoreFacetsContent>(
|
|
158
|
+
html`<more-facets-content
|
|
159
|
+
.analyticsHandler=${mockAnalyticsHandler}
|
|
160
|
+
></more-facets-content>`
|
|
142
161
|
);
|
|
143
|
-
|
|
144
|
-
|
|
162
|
+
|
|
163
|
+
el.facetsLoading = false;
|
|
164
|
+
el.paginationSize = 5;
|
|
165
|
+
el.facetKey = 'collection';
|
|
166
|
+
await el.updateComplete;
|
|
167
|
+
|
|
168
|
+
// select submit button
|
|
169
|
+
const submitButton = el.shadowRoot?.querySelector(
|
|
170
|
+
'.footer > .btn-submit'
|
|
171
|
+
) as HTMLButtonElement;
|
|
172
|
+
submitButton?.click();
|
|
173
|
+
|
|
174
|
+
expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
|
|
175
|
+
expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');
|
|
176
|
+
expect(mockAnalyticsHandler.callLabel).to.equal('collection');
|
|
145
177
|
});
|
|
146
178
|
});
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
LanguageCodeHandler,
|
|
16
16
|
LanguageCodeHandlerInterface,
|
|
17
17
|
} from '../src/language-code-handler/language-code-handler';
|
|
18
|
+
import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
|
|
18
19
|
|
|
19
20
|
describe('Collection Facets', () => {
|
|
20
21
|
it('has loader', async () => {
|
|
@@ -60,7 +61,7 @@ describe('Collection Facets', () => {
|
|
|
60
61
|
const titleFacetRow = titleFacetGroup
|
|
61
62
|
?.querySelector('facets-template')
|
|
62
63
|
?.shadowRoot?.querySelector('.facet-row');
|
|
63
|
-
|
|
64
|
+
|
|
64
65
|
expect(titleFacetRow?.textContent?.trim()).to.satisfy((text: string) =>
|
|
65
66
|
/^foo\s*5$/.test(text)
|
|
66
67
|
);
|
|
@@ -553,4 +554,64 @@ describe('Collection Facets', () => {
|
|
|
553
554
|
expect(eventFacet).to.equal('subject' as FacetOption);
|
|
554
555
|
});
|
|
555
556
|
});
|
|
557
|
+
|
|
558
|
+
it('fire analytics on more link', async () => {
|
|
559
|
+
const mockAnalyticsHandler = new MockAnalyticsHandler();
|
|
560
|
+
|
|
561
|
+
const el = await fixture<CollectionFacets>(
|
|
562
|
+
html`<collection-facets
|
|
563
|
+
.analyticsHandler=${mockAnalyticsHandler}
|
|
564
|
+
></collection-facets>`
|
|
565
|
+
);
|
|
566
|
+
const aggs: Record<string, Aggregation> = {
|
|
567
|
+
subject: new Aggregation({
|
|
568
|
+
buckets: [
|
|
569
|
+
{
|
|
570
|
+
key: 'foo',
|
|
571
|
+
doc_count: 5,
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
key: 'fi',
|
|
575
|
+
doc_count: 5,
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
key: 'fum',
|
|
579
|
+
doc_count: 5,
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
key: 'flee',
|
|
583
|
+
doc_count: 5,
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
key: 'wheee',
|
|
587
|
+
doc_count: 5,
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
key: 'whooo',
|
|
591
|
+
doc_count: 5,
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
key: 'boop',
|
|
595
|
+
doc_count: 5,
|
|
596
|
+
},
|
|
597
|
+
],
|
|
598
|
+
}),
|
|
599
|
+
};
|
|
600
|
+
|
|
601
|
+
el.aggregations = aggs;
|
|
602
|
+
await el.updateComplete;
|
|
603
|
+
|
|
604
|
+
const moreLink = el.shadowRoot?.querySelector(
|
|
605
|
+
'.more-link'
|
|
606
|
+
) as HTMLButtonElement;
|
|
607
|
+
|
|
608
|
+
expect(moreLink).to.exist; // has link
|
|
609
|
+
|
|
610
|
+
moreLink?.click();
|
|
611
|
+
await el.updateComplete;
|
|
612
|
+
|
|
613
|
+
expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
|
|
614
|
+
expect(mockAnalyticsHandler.callAction).to.equal('showMoreFacetsModal');
|
|
615
|
+
expect(mockAnalyticsHandler.callLabel).to.equal('subject');
|
|
616
|
+
});
|
|
556
617
|
});
|
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
|
+
});
|