@internetarchive/collection-browser 3.5.2-alpha-webdev8164.0 → 3.5.2-webdev-8162.1
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 +27 -27
- 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/.prettierignore +1 -1
- package/LICENSE +661 -661
- package/README.md +83 -83
- package/dist/src/app-root.js +606 -606
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-facets/facets-template.js +23 -28
- package/dist/src/collection-facets/facets-template.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +8 -34
- package/dist/src/collection-facets/more-facets-content.js +159 -358
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.js +77 -77
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +137 -137
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/models.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.js +215 -215
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/test/collection-browser.test.js +1 -1
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/collection-facets/more-facets-content.test.js +31 -137
- package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
- package/eslint.config.mjs +53 -53
- package/index.html +24 -24
- package/local.archive.org.cert +86 -86
- package/local.archive.org.key +27 -27
- package/package.json +121 -119
- package/renovate.json +6 -6
- package/src/app-root.ts +1140 -1140
- package/src/collection-facets/facets-template.ts +83 -88
- package/src/collection-facets/more-facets-content.ts +642 -856
- package/src/tiles/grid/collection-tile.ts +163 -163
- package/src/tiles/grid/item-tile.ts +340 -340
- package/src/tiles/models.ts +1 -1
- package/src/tiles/tile-dispatcher.ts +517 -517
- package/test/collection-browser.test.ts +1 -1
- package/test/collection-facets/more-facets-content.test.ts +231 -378
- package/tsconfig.json +25 -25
- package/web-dev-server.config.mjs +30 -30
- package/web-test-runner.config.mjs +52 -41
- package/.husky/pre-commit +0 -4
|
@@ -3,7 +3,6 @@ import { html } from 'lit';
|
|
|
3
3
|
import '../../src/collection-facets/more-facets-content';
|
|
4
4
|
import { MockSearchService } from '../mocks/mock-search-service';
|
|
5
5
|
import { MockAnalyticsHandler } from '../mocks/mock-analytics-handler';
|
|
6
|
-
import { Aggregation } from '@internetarchive/search-service';
|
|
7
6
|
const selectedFacetsGroup = {
|
|
8
7
|
title: 'Media Type',
|
|
9
8
|
key: 'mediatype',
|
|
@@ -39,28 +38,21 @@ describe('More facets content', () => {
|
|
|
39
38
|
await el.updateComplete;
|
|
40
39
|
expect(el.shadowRoot?.querySelector('.facets-loader')).to.exist;
|
|
41
40
|
});
|
|
42
|
-
it('should
|
|
41
|
+
it('should render pagination for more facets', async () => {
|
|
43
42
|
const searchService = new MockSearchService();
|
|
44
|
-
const el = await fixture(html `<more-facets-content
|
|
45
|
-
.searchService=${searchService}
|
|
43
|
+
const el = await fixture(html `<more-facets-content
|
|
44
|
+
.searchService=${searchService}
|
|
46
45
|
></more-facets-content>`);
|
|
47
46
|
el.facetKey = 'year';
|
|
48
|
-
el.query = 'more-facets'; // Produces a response with
|
|
47
|
+
el.query = 'more-facets'; // Produces a response with 40+ aggregations for multiple pages
|
|
49
48
|
await el.updateComplete;
|
|
50
49
|
await aTimeout(50); // Give it a moment to perform the (mock) search query after the initial update
|
|
51
|
-
|
|
52
|
-
expect(el.shadowRoot?.querySelector('more-facets-pagination')).to.not.exist;
|
|
53
|
-
// Verify horizontal scroll mode CSS class is applied
|
|
54
|
-
expect(el.shadowRoot?.querySelector('.facets-content.horizontal-scroll-mode')).to.exist;
|
|
55
|
-
// Verify footer still exists with buttons
|
|
56
|
-
expect(el.shadowRoot?.querySelector('.footer')).to.exist;
|
|
57
|
-
expect(el.shadowRoot?.querySelector('.btn-cancel')).to.exist;
|
|
58
|
-
expect(el.shadowRoot?.querySelector('.btn-submit')).to.exist;
|
|
50
|
+
expect(el.shadowRoot?.querySelectorAll('more-facets-pagination')).to.exist;
|
|
59
51
|
});
|
|
60
52
|
it('query for more facets content using search service', async () => {
|
|
61
53
|
const searchService = new MockSearchService();
|
|
62
|
-
const el = await fixture(html `<more-facets-content
|
|
63
|
-
.searchService=${searchService}
|
|
54
|
+
const el = await fixture(html `<more-facets-content
|
|
55
|
+
.searchService=${searchService}
|
|
64
56
|
></more-facets-content>`);
|
|
65
57
|
el.facetKey = 'collection';
|
|
66
58
|
el.query = 'collection-aggregations';
|
|
@@ -69,12 +61,12 @@ describe('More facets content', () => {
|
|
|
69
61
|
});
|
|
70
62
|
it('queries for more facets using search service within a collection (no query)', async () => {
|
|
71
63
|
const searchService = new MockSearchService();
|
|
72
|
-
const el = await fixture(html `<more-facets-content
|
|
73
|
-
.searchService=${searchService}
|
|
64
|
+
const el = await fixture(html `<more-facets-content
|
|
65
|
+
.searchService=${searchService}
|
|
74
66
|
.pageSpecifierParams=${{
|
|
75
67
|
pageType: 'collection_details',
|
|
76
68
|
pageTarget: 'foobar',
|
|
77
|
-
}}
|
|
69
|
+
}}
|
|
78
70
|
></more-facets-content>`);
|
|
79
71
|
el.facetKey = 'subject';
|
|
80
72
|
await el.updateComplete;
|
|
@@ -83,12 +75,12 @@ describe('More facets content', () => {
|
|
|
83
75
|
});
|
|
84
76
|
it('queries for more facets using search service within a collection (with query)', async () => {
|
|
85
77
|
const searchService = new MockSearchService();
|
|
86
|
-
const el = await fixture(html `<more-facets-content
|
|
87
|
-
.searchService=${searchService}
|
|
78
|
+
const el = await fixture(html `<more-facets-content
|
|
79
|
+
.searchService=${searchService}
|
|
88
80
|
.pageSpecifierParams=${{
|
|
89
81
|
pageType: 'collection_details',
|
|
90
82
|
pageTarget: 'foobar',
|
|
91
|
-
}}
|
|
83
|
+
}}
|
|
92
84
|
></more-facets-content>`);
|
|
93
85
|
el.facetKey = 'subject';
|
|
94
86
|
el.query = 'title:hello';
|
|
@@ -98,9 +90,9 @@ describe('More facets content', () => {
|
|
|
98
90
|
});
|
|
99
91
|
it('filter raw selectedFacets object', async () => {
|
|
100
92
|
const searchService = new MockSearchService();
|
|
101
|
-
const el = await fixture(html `<more-facets-content
|
|
102
|
-
.searchService=${searchService}
|
|
103
|
-
.selectedFacets=${selectedFacetsGroup}
|
|
93
|
+
const el = await fixture(html `<more-facets-content
|
|
94
|
+
.searchService=${searchService}
|
|
95
|
+
.selectedFacets=${selectedFacetsGroup}
|
|
104
96
|
></more-facets-content>`);
|
|
105
97
|
el.facetKey = 'collection';
|
|
106
98
|
el.query = 'title:hello';
|
|
@@ -109,11 +101,11 @@ describe('More facets content', () => {
|
|
|
109
101
|
});
|
|
110
102
|
it('combines selectedFacets and aggregationFacets and renders on modal', async () => {
|
|
111
103
|
const searchService = new MockSearchService();
|
|
112
|
-
const el = await fixture(html `<more-facets-content
|
|
113
|
-
.facetKey=${'year'}
|
|
114
|
-
.query=${'more-facets'}
|
|
115
|
-
.searchService=${searchService}
|
|
116
|
-
.selectedFacets=${yearSelectedFacets}
|
|
104
|
+
const el = await fixture(html `<more-facets-content
|
|
105
|
+
.facetKey=${'year'}
|
|
106
|
+
.query=${'more-facets'}
|
|
107
|
+
.searchService=${searchService}
|
|
108
|
+
.selectedFacets=${yearSelectedFacets}
|
|
117
109
|
></more-facets-content>`);
|
|
118
110
|
const facetsTemplate = el.shadowRoot?.querySelector('facets-template');
|
|
119
111
|
expect(facetsTemplate).to.exist;
|
|
@@ -132,11 +124,11 @@ describe('More facets content', () => {
|
|
|
132
124
|
it('cancel button clicked event', async () => {
|
|
133
125
|
const searchService = new MockSearchService();
|
|
134
126
|
const mockAnalyticsHandler = new MockAnalyticsHandler();
|
|
135
|
-
const el = await fixture(html `<more-facets-content
|
|
136
|
-
.facetKey=${'collection'}
|
|
137
|
-
.query=${'collection-aggregations'}
|
|
138
|
-
.searchService=${searchService}
|
|
139
|
-
.analyticsHandler=${mockAnalyticsHandler}
|
|
127
|
+
const el = await fixture(html `<more-facets-content
|
|
128
|
+
.facetKey=${'collection'}
|
|
129
|
+
.query=${'collection-aggregations'}
|
|
130
|
+
.searchService=${searchService}
|
|
131
|
+
.analyticsHandler=${mockAnalyticsHandler}
|
|
140
132
|
></more-facets-content>`);
|
|
141
133
|
// select cancel button
|
|
142
134
|
const cancelButton = el.shadowRoot?.querySelector('.footer > .btn-cancel');
|
|
@@ -149,11 +141,11 @@ describe('More facets content', () => {
|
|
|
149
141
|
it('facet apply button clicked event', async () => {
|
|
150
142
|
const searchService = new MockSearchService();
|
|
151
143
|
const mockAnalyticsHandler = new MockAnalyticsHandler();
|
|
152
|
-
const el = await fixture(html `<more-facets-content
|
|
153
|
-
.facetKey=${'collection'}
|
|
154
|
-
.query=${'collection-aggregations'}
|
|
155
|
-
.searchService=${searchService}
|
|
156
|
-
.analyticsHandler=${mockAnalyticsHandler}
|
|
144
|
+
const el = await fixture(html `<more-facets-content
|
|
145
|
+
.facetKey=${'collection'}
|
|
146
|
+
.query=${'collection-aggregations'}
|
|
147
|
+
.searchService=${searchService}
|
|
148
|
+
.analyticsHandler=${mockAnalyticsHandler}
|
|
157
149
|
></more-facets-content>`);
|
|
158
150
|
// select submit button
|
|
159
151
|
const submitButton = el.shadowRoot?.querySelector('.footer > .btn-submit');
|
|
@@ -163,103 +155,5 @@ describe('More facets content', () => {
|
|
|
163
155
|
expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');
|
|
164
156
|
expect(mockAnalyticsHandler.callLabel).to.equal('collection');
|
|
165
157
|
});
|
|
166
|
-
it('should have horizontal scrolling enabled', async () => {
|
|
167
|
-
const searchService = new MockSearchService();
|
|
168
|
-
const el = await fixture(html `<more-facets-content
|
|
169
|
-
.searchService=${searchService}
|
|
170
|
-
></more-facets-content>`);
|
|
171
|
-
el.facetKey = 'year';
|
|
172
|
-
el.query = 'more-facets';
|
|
173
|
-
await el.updateComplete;
|
|
174
|
-
await aTimeout(50);
|
|
175
|
-
const facetsContent = el.shadowRoot?.querySelector('.facets-content');
|
|
176
|
-
const styles = window.getComputedStyle(facetsContent);
|
|
177
|
-
expect(styles.overflowX).to.equal('auto');
|
|
178
|
-
expect(styles.overflowY).to.equal('hidden');
|
|
179
|
-
});
|
|
180
|
-
it('should have horizontal container wrapper', async () => {
|
|
181
|
-
const searchService = new MockSearchService();
|
|
182
|
-
const el = await fixture(html `<more-facets-content
|
|
183
|
-
.searchService=${searchService}
|
|
184
|
-
></more-facets-content>`);
|
|
185
|
-
el.facetKey = 'year';
|
|
186
|
-
el.query = 'more-facets';
|
|
187
|
-
await el.updateComplete;
|
|
188
|
-
await aTimeout(50);
|
|
189
|
-
const container = el.shadowRoot?.querySelector('.facets-horizontal-container');
|
|
190
|
-
expect(container).to.exist;
|
|
191
|
-
const facetsTemplate = container?.querySelector('facets-template');
|
|
192
|
-
expect(facetsTemplate).to.exist;
|
|
193
|
-
});
|
|
194
|
-
it('should render pagination when facet count >= 1000', async () => {
|
|
195
|
-
// Manually create aggregations with 1000+ facets
|
|
196
|
-
const buckets = [];
|
|
197
|
-
for (let i = 0; i < 1000; i++) {
|
|
198
|
-
buckets.push({ key: `value-${i}`, doc_count: i + 1 });
|
|
199
|
-
}
|
|
200
|
-
const el = await fixture(html `<more-facets-content
|
|
201
|
-
.facetKey=${'subject'}
|
|
202
|
-
.selectedFacets=${{
|
|
203
|
-
mediatype: {},
|
|
204
|
-
lending: {},
|
|
205
|
-
year: {},
|
|
206
|
-
subject: {},
|
|
207
|
-
collection: {},
|
|
208
|
-
creator: {},
|
|
209
|
-
language: {},
|
|
210
|
-
}}
|
|
211
|
-
></more-facets-content>`);
|
|
212
|
-
// @ts-expect-error - accessing private property for testing
|
|
213
|
-
el.aggregations = {
|
|
214
|
-
subject: new Aggregation({ buckets }),
|
|
215
|
-
};
|
|
216
|
-
el.facetsLoading = false;
|
|
217
|
-
await el.updateComplete;
|
|
218
|
-
// Verify pagination component IS present
|
|
219
|
-
expect(el.shadowRoot?.querySelector('more-facets-pagination')).to.exist;
|
|
220
|
-
// Verify pagination mode CSS class is applied
|
|
221
|
-
expect(el.shadowRoot?.querySelector('.facets-content.pagination-mode')).to
|
|
222
|
-
.exist;
|
|
223
|
-
// Verify horizontal container wrapper does NOT exist in pagination mode
|
|
224
|
-
expect(el.shadowRoot?.querySelector('.facets-horizontal-container')).to.not
|
|
225
|
-
.exist;
|
|
226
|
-
});
|
|
227
|
-
it('pagination page change should send analytics event', async () => {
|
|
228
|
-
const mockAnalyticsHandler = new MockAnalyticsHandler();
|
|
229
|
-
// Manually create aggregations with 1000+ facets
|
|
230
|
-
const buckets = [];
|
|
231
|
-
for (let i = 0; i < 1000; i++) {
|
|
232
|
-
buckets.push({ key: `value-${i}`, doc_count: i + 1 });
|
|
233
|
-
}
|
|
234
|
-
const el = await fixture(html `<more-facets-content
|
|
235
|
-
.facetKey=${'subject'}
|
|
236
|
-
.selectedFacets=${{
|
|
237
|
-
mediatype: {},
|
|
238
|
-
lending: {},
|
|
239
|
-
year: {},
|
|
240
|
-
subject: {},
|
|
241
|
-
collection: {},
|
|
242
|
-
creator: {},
|
|
243
|
-
language: {},
|
|
244
|
-
}}
|
|
245
|
-
.analyticsHandler=${mockAnalyticsHandler}
|
|
246
|
-
></more-facets-content>`);
|
|
247
|
-
// @ts-expect-error - accessing private property for testing
|
|
248
|
-
el.aggregations = {
|
|
249
|
-
subject: new Aggregation({ buckets }),
|
|
250
|
-
};
|
|
251
|
-
el.facetsLoading = false;
|
|
252
|
-
await el.updateComplete;
|
|
253
|
-
// Get the pagination component
|
|
254
|
-
const pagination = el.shadowRoot?.querySelector('more-facets-pagination');
|
|
255
|
-
expect(pagination).to.exist;
|
|
256
|
-
// Simulate clicking page 2
|
|
257
|
-
pagination.currentPage = 2;
|
|
258
|
-
await pagination.updateComplete;
|
|
259
|
-
// Verify analytics event was sent
|
|
260
|
-
expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');
|
|
261
|
-
expect(mockAnalyticsHandler.callAction).to.equal('moreFacetsPageChange');
|
|
262
|
-
expect(mockAnalyticsHandler.callLabel).to.equal('2');
|
|
263
|
-
});
|
|
264
158
|
});
|
|
265
159
|
//# sourceMappingURL=more-facets-content.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"more-facets-content.test.js","sourceRoot":"","sources":["../../../test/collection-facets/more-facets-content.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { aTimeout, expect, fixture } from '@open-wc/testing';\r\nimport { html } from 'lit';\r\nimport type { MoreFacetsContent } from '../../src/collection-facets/more-facets-content';\r\nimport '../../src/collection-facets/more-facets-content';\r\nimport { MockSearchService } from '../mocks/mock-search-service';\r\nimport { MockAnalyticsHandler } from '../mocks/mock-analytics-handler';\r\nimport type { FacetsTemplate } from '../../src/collection-facets/facets-template';\r\nimport type { SelectedFacets } from '../../src/models';\r\nimport { Aggregation, type Bucket } from '@internetarchive/search-service';\r\n\r\nconst selectedFacetsGroup = {\r\n title: 'Media Type',\r\n key: 'mediatype',\r\n buckets: [\r\n { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },\r\n { displayText: 'movies', key: 'movies', count: 901, state: 'none' },\r\n { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },\r\n { displayText: 'data', key: 'data', count: 230, state: 'none' },\r\n { displayText: 'web', key: 'web', count: 453, state: 'none' },\r\n ],\r\n};\r\n\r\nconst yearSelectedFacets: SelectedFacets = {\r\n mediatype: {},\r\n lending: {},\r\n year: {\r\n '2000': { key: '2000', count: 5, state: 'selected' },\r\n },\r\n subject: {},\r\n collection: {},\r\n creator: {},\r\n language: {},\r\n};\r\n\r\ndescribe('More facets content', () => {\r\n it('should render more facets template', async () => {\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content></more-facets-content>`,\r\n );\r\n\r\n el.facetsLoading = false;\r\n await el.updateComplete;\r\n\r\n expect(el.shadowRoot?.querySelector('.facets-content')).to.exist;\r\n });\r\n\r\n it('should render more facets loader template', async () => {\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content></more-facets-content>`,\r\n );\r\n\r\n el.facetsLoading = true;\r\n await el.updateComplete;\r\n\r\n expect(el.shadowRoot?.querySelector('.facets-loader')).to.exist;\r\n });\r\n\r\n it('should NOT render pagination when facet count < 1000', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'year';\r\n el.query = 'more-facets'; // Produces a response with 45 aggregations (< 1000)\r\n await el.updateComplete;\r\n await aTimeout(50); // Give it a moment to perform the (mock) search query after the initial update\r\n\r\n // Verify pagination component is NOT present (horizontal scroll mode)\r\n expect(el.shadowRoot?.querySelector('more-facets-pagination')).to.not.exist;\r\n\r\n // Verify horizontal scroll mode CSS class is applied\r\n expect(\r\n el.shadowRoot?.querySelector('.facets-content.horizontal-scroll-mode'),\r\n ).to.exist;\r\n\r\n // Verify footer still exists with buttons\r\n expect(el.shadowRoot?.querySelector('.footer')).to.exist;\r\n expect(el.shadowRoot?.querySelector('.btn-cancel')).to.exist;\r\n expect(el.shadowRoot?.querySelector('.btn-submit')).to.exist;\r\n });\r\n\r\n it('query for more facets content using search service', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'collection';\r\n el.query = 'collection-aggregations';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.equal(\r\n 'collection-aggregations',\r\n );\r\n });\r\n\r\n it('queries for more facets using search service within a collection (no query)', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n .pageSpecifierParams=${{\r\n pageType: 'collection_details',\r\n pageTarget: 'foobar',\r\n }}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'subject';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.be.empty;\r\n expect(searchService.searchParams?.pageTarget).to.equal('foobar');\r\n });\r\n\r\n it('queries for more facets using search service within a collection (with query)', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n .pageSpecifierParams=${{\r\n pageType: 'collection_details',\r\n pageTarget: 'foobar',\r\n }}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'subject';\r\n el.query = 'title:hello';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.equal('title:hello');\r\n expect(searchService.searchParams?.pageTarget).to.equal('foobar');\r\n });\r\n\r\n it('filter raw selectedFacets object', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n .selectedFacets=${selectedFacetsGroup}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'collection';\r\n el.query = 'title:hello';\r\n await el.updateComplete;\r\n\r\n expect(searchService.searchParams?.query).to.equal('title:hello');\r\n });\r\n\r\n it('combines selectedFacets and aggregationFacets and renders on modal', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .facetKey=${'year'}\r\n .query=${'more-facets'}\r\n .searchService=${searchService}\r\n .selectedFacets=${yearSelectedFacets}\r\n ></more-facets-content>`,\r\n );\r\n\r\n const facetsTemplate = el.shadowRoot?.querySelector(\r\n 'facets-template',\r\n ) as FacetsTemplate;\r\n expect(facetsTemplate).to.exist;\r\n\r\n const { facetGroup } = facetsTemplate;\r\n expect(facetGroup?.key).to.equal('year');\r\n expect(facetGroup?.title).to.equal('Year');\r\n\r\n // First bucket is the one that was included in the selected facets\r\n const firstBucket = facetGroup?.buckets[0];\r\n expect(firstBucket?.key).to.equal('2000');\r\n expect(firstBucket?.count).to.equal(5);\r\n\r\n // Second bucket is the most recent year, since year facets default to descending order of year\r\n const secondBucket = facetGroup?.buckets[1];\r\n expect(secondBucket?.key).to.equal('2024');\r\n expect(secondBucket?.count).to.equal(5);\r\n });\r\n\r\n it('cancel button clicked event', async () => {\r\n const searchService = new MockSearchService();\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .facetKey=${'collection'}\r\n .query=${'collection-aggregations'}\r\n .searchService=${searchService}\r\n .analyticsHandler=${mockAnalyticsHandler}\r\n ></more-facets-content>`,\r\n );\r\n\r\n // select cancel button\r\n const cancelButton = el.shadowRoot?.querySelector(\r\n '.footer > .btn-cancel',\r\n ) as HTMLButtonElement;\r\n expect(cancelButton).to.exist;\r\n cancelButton?.click();\r\n\r\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\r\n expect(mockAnalyticsHandler.callAction).to.equal('closeMoreFacetsModal');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('collection');\r\n });\r\n\r\n it('facet apply button clicked event', async () => {\r\n const searchService = new MockSearchService();\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .facetKey=${'collection'}\r\n .query=${'collection-aggregations'}\r\n .searchService=${searchService}\r\n .analyticsHandler=${mockAnalyticsHandler}\r\n ></more-facets-content>`,\r\n );\r\n\r\n // select submit button\r\n const submitButton = el.shadowRoot?.querySelector(\r\n '.footer > .btn-submit',\r\n ) as HTMLButtonElement;\r\n expect(submitButton).to.exist;\r\n submitButton?.click();\r\n\r\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\r\n expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('collection');\r\n });\r\n\r\n it('should have horizontal scrolling enabled', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'year';\r\n el.query = 'more-facets';\r\n await el.updateComplete;\r\n await aTimeout(50);\r\n\r\n const facetsContent = el.shadowRoot?.querySelector(\r\n '.facets-content',\r\n ) as HTMLElement;\r\n const styles = window.getComputedStyle(facetsContent);\r\n\r\n expect(styles.overflowX).to.equal('auto');\r\n expect(styles.overflowY).to.equal('hidden');\r\n });\r\n\r\n it('should have horizontal container wrapper', async () => {\r\n const searchService = new MockSearchService();\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .searchService=${searchService}\r\n ></more-facets-content>`,\r\n );\r\n\r\n el.facetKey = 'year';\r\n el.query = 'more-facets';\r\n await el.updateComplete;\r\n await aTimeout(50);\r\n\r\n const container = el.shadowRoot?.querySelector(\r\n '.facets-horizontal-container',\r\n );\r\n expect(container).to.exist;\r\n\r\n const facetsTemplate = container?.querySelector('facets-template');\r\n expect(facetsTemplate).to.exist;\r\n });\r\n\r\n it('should render pagination when facet count >= 1000', async () => {\r\n // Manually create aggregations with 1000+ facets\r\n const buckets: Bucket[] = [];\r\n for (let i = 0; i < 1000; i++) {\r\n buckets.push({ key: `value-${i}`, doc_count: i + 1 });\r\n }\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .facetKey=${'subject'}\r\n .selectedFacets=${{\r\n mediatype: {},\r\n lending: {},\r\n year: {},\r\n subject: {},\r\n collection: {},\r\n creator: {},\r\n language: {},\r\n }}\r\n ></more-facets-content>`,\r\n );\r\n\r\n // @ts-expect-error - accessing private property for testing\r\n el.aggregations = {\r\n subject: new Aggregation({ buckets }),\r\n };\r\n el.facetsLoading = false;\r\n await el.updateComplete;\r\n\r\n // Verify pagination component IS present\r\n expect(el.shadowRoot?.querySelector('more-facets-pagination')).to.exist;\r\n\r\n // Verify pagination mode CSS class is applied\r\n expect(el.shadowRoot?.querySelector('.facets-content.pagination-mode')).to\r\n .exist;\r\n\r\n // Verify horizontal container wrapper does NOT exist in pagination mode\r\n expect(el.shadowRoot?.querySelector('.facets-horizontal-container')).to.not\r\n .exist;\r\n });\r\n\r\n it('pagination page change should send analytics event', async () => {\r\n const mockAnalyticsHandler = new MockAnalyticsHandler();\r\n\r\n // Manually create aggregations with 1000+ facets\r\n const buckets: Bucket[] = [];\r\n for (let i = 0; i < 1000; i++) {\r\n buckets.push({ key: `value-${i}`, doc_count: i + 1 });\r\n }\r\n\r\n const el = await fixture<MoreFacetsContent>(\r\n html`<more-facets-content\r\n .facetKey=${'subject'}\r\n .selectedFacets=${{\r\n mediatype: {},\r\n lending: {},\r\n year: {},\r\n subject: {},\r\n collection: {},\r\n creator: {},\r\n language: {},\r\n }}\r\n .analyticsHandler=${mockAnalyticsHandler}\r\n ></more-facets-content>`,\r\n );\r\n\r\n // @ts-expect-error - accessing private property for testing\r\n el.aggregations = {\r\n subject: new Aggregation({ buckets }),\r\n };\r\n el.facetsLoading = false;\r\n await el.updateComplete;\r\n\r\n // Get the pagination component\r\n const pagination = el.shadowRoot?.querySelector(\r\n 'more-facets-pagination',\r\n ) as any;\r\n expect(pagination).to.exist;\r\n\r\n // Simulate clicking page 2\r\n pagination.currentPage = 2;\r\n await pagination.updateComplete;\r\n\r\n // Verify analytics event was sent\r\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\r\n expect(mockAnalyticsHandler.callAction).to.equal('moreFacetsPageChange');\r\n expect(mockAnalyticsHandler.callLabel).to.equal('2');\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"more-facets-content.test.js","sourceRoot":"","sources":["../../../test/collection-facets/more-facets-content.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { aTimeout, expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { MoreFacetsContent } from '../../src/collection-facets/more-facets-content';\nimport '../../src/collection-facets/more-facets-content';\nimport { MockSearchService } from '../mocks/mock-search-service';\nimport { MockAnalyticsHandler } from '../mocks/mock-analytics-handler';\nimport type { FacetsTemplate } from '../../src/collection-facets/facets-template';\nimport type { SelectedFacets } from '../../src/models';\n\nconst selectedFacetsGroup = {\n title: 'Media Type',\n key: 'mediatype',\n buckets: [\n { displayText: 'audio', key: 'audio', count: 1001, state: 'none' },\n { displayText: 'movies', key: 'movies', count: 901, state: 'none' },\n { displayText: 'texts', key: 'texts', count: 2101, state: 'none' },\n { displayText: 'data', key: 'data', count: 230, state: 'none' },\n { displayText: 'web', key: 'web', count: 453, state: 'none' },\n ],\n};\n\nconst yearSelectedFacets: SelectedFacets = {\n mediatype: {},\n lending: {},\n year: {\n '2000': { key: '2000', count: 5, state: 'selected' },\n },\n subject: {},\n collection: {},\n creator: {},\n language: {},\n};\n\ndescribe('More facets content', () => {\n it('should render more facets template', async () => {\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content></more-facets-content>`,\n );\n\n el.facetsLoading = false;\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-content')).to.exist;\n });\n\n it('should render more facets loader template', async () => {\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content></more-facets-content>`,\n );\n\n el.facetsLoading = true;\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-loader')).to.exist;\n });\n\n it('should render pagination for more facets', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .searchService=${searchService}\n ></more-facets-content>`,\n );\n\n el.facetKey = 'year';\n el.query = 'more-facets'; // Produces a response with 40+ aggregations for multiple pages\n await el.updateComplete;\n await aTimeout(50); // Give it a moment to perform the (mock) search query after the initial update\n\n expect(el.shadowRoot?.querySelectorAll('more-facets-pagination')).to.exist;\n });\n\n it('query for more facets content using search service', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .searchService=${searchService}\n ></more-facets-content>`,\n );\n\n el.facetKey = 'collection';\n el.query = 'collection-aggregations';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal(\n 'collection-aggregations',\n );\n });\n\n it('queries for more facets using search service within a collection (no query)', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .searchService=${searchService}\n .pageSpecifierParams=${{\n pageType: 'collection_details',\n pageTarget: 'foobar',\n }}\n ></more-facets-content>`,\n );\n\n el.facetKey = 'subject';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.be.empty;\n expect(searchService.searchParams?.pageTarget).to.equal('foobar');\n });\n\n it('queries for more facets using search service within a collection (with query)', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .searchService=${searchService}\n .pageSpecifierParams=${{\n pageType: 'collection_details',\n pageTarget: 'foobar',\n }}\n ></more-facets-content>`,\n );\n\n el.facetKey = 'subject';\n el.query = 'title:hello';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('title:hello');\n expect(searchService.searchParams?.pageTarget).to.equal('foobar');\n });\n\n it('filter raw selectedFacets object', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .searchService=${searchService}\n .selectedFacets=${selectedFacetsGroup}\n ></more-facets-content>`,\n );\n\n el.facetKey = 'collection';\n el.query = 'title:hello';\n await el.updateComplete;\n\n expect(searchService.searchParams?.query).to.equal('title:hello');\n });\n\n it('combines selectedFacets and aggregationFacets and renders on modal', async () => {\n const searchService = new MockSearchService();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .facetKey=${'year'}\n .query=${'more-facets'}\n .searchService=${searchService}\n .selectedFacets=${yearSelectedFacets}\n ></more-facets-content>`,\n );\n\n const facetsTemplate = el.shadowRoot?.querySelector(\n 'facets-template',\n ) as FacetsTemplate;\n expect(facetsTemplate).to.exist;\n\n const { facetGroup } = facetsTemplate;\n expect(facetGroup?.key).to.equal('year');\n expect(facetGroup?.title).to.equal('Year');\n\n // First bucket is the one that was included in the selected facets\n const firstBucket = facetGroup?.buckets[0];\n expect(firstBucket?.key).to.equal('2000');\n expect(firstBucket?.count).to.equal(5);\n\n // Second bucket is the most recent year, since year facets default to descending order of year\n const secondBucket = facetGroup?.buckets[1];\n expect(secondBucket?.key).to.equal('2024');\n expect(secondBucket?.count).to.equal(5);\n });\n\n it('cancel button clicked event', async () => {\n const searchService = new MockSearchService();\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .facetKey=${'collection'}\n .query=${'collection-aggregations'}\n .searchService=${searchService}\n .analyticsHandler=${mockAnalyticsHandler}\n ></more-facets-content>`,\n );\n\n // select cancel button\n const cancelButton = el.shadowRoot?.querySelector(\n '.footer > .btn-cancel',\n ) as HTMLButtonElement;\n expect(cancelButton).to.exist;\n cancelButton?.click();\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('closeMoreFacetsModal');\n expect(mockAnalyticsHandler.callLabel).to.equal('collection');\n });\n\n it('facet apply button clicked event', async () => {\n const searchService = new MockSearchService();\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .facetKey=${'collection'}\n .query=${'collection-aggregations'}\n .searchService=${searchService}\n .analyticsHandler=${mockAnalyticsHandler}\n ></more-facets-content>`,\n );\n\n // select submit button\n const submitButton = el.shadowRoot?.querySelector(\n '.footer > .btn-submit',\n ) as HTMLButtonElement;\n expect(submitButton).to.exist;\n submitButton?.click();\n\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');\n expect(mockAnalyticsHandler.callLabel).to.equal('collection');\n });\n});\n"]}
|
package/eslint.config.mjs
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
2
|
-
import html from 'eslint-plugin-html';
|
|
3
|
-
import tsParser from '@typescript-eslint/parser';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import js from '@eslint/js';
|
|
7
|
-
import { FlatCompat } from '@eslint/eslintrc';
|
|
8
|
-
|
|
9
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
-
const __dirname = path.dirname(__filename);
|
|
11
|
-
const compat = new FlatCompat({
|
|
12
|
-
baseDirectory: __dirname,
|
|
13
|
-
recommendedConfig: js.configs.recommended,
|
|
14
|
-
allConfig: js.configs.all,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
export default [
|
|
18
|
-
...compat.extends('plugin:@typescript-eslint/recommended'),
|
|
19
|
-
{
|
|
20
|
-
plugins: {
|
|
21
|
-
'@typescript-eslint': typescriptEslint,
|
|
22
|
-
html,
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
languageOptions: {
|
|
26
|
-
parser: tsParser,
|
|
27
|
-
},
|
|
28
|
-
|
|
29
|
-
settings: {
|
|
30
|
-
'import/resolver': {
|
|
31
|
-
node: {
|
|
32
|
-
extensions: ['.ts', '.tsx'],
|
|
33
|
-
moduleDirectory: ['node_modules', 'src', 'demo'],
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
rules: {
|
|
39
|
-
'@typescript-eslint/no-unsafe-function-type': 'warn',
|
|
40
|
-
'@typescript-eslint/no-unused-vars': 'warn',
|
|
41
|
-
'@typescript-eslint/no-explicit-any': 'warn',
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
files: ['**/*.test.ts'],
|
|
49
|
-
rules: {
|
|
50
|
-
'@typescript-eslint/no-unused-expressions': 'off',
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
];
|
|
1
|
+
import typescriptEslint from '@typescript-eslint/eslint-plugin';
|
|
2
|
+
import html from 'eslint-plugin-html';
|
|
3
|
+
import tsParser from '@typescript-eslint/parser';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import js from '@eslint/js';
|
|
7
|
+
import { FlatCompat } from '@eslint/eslintrc';
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
const compat = new FlatCompat({
|
|
12
|
+
baseDirectory: __dirname,
|
|
13
|
+
recommendedConfig: js.configs.recommended,
|
|
14
|
+
allConfig: js.configs.all,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export default [
|
|
18
|
+
...compat.extends('plugin:@typescript-eslint/recommended'),
|
|
19
|
+
{
|
|
20
|
+
plugins: {
|
|
21
|
+
'@typescript-eslint': typescriptEslint,
|
|
22
|
+
html,
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
languageOptions: {
|
|
26
|
+
parser: tsParser,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
settings: {
|
|
30
|
+
'import/resolver': {
|
|
31
|
+
node: {
|
|
32
|
+
extensions: ['.ts', '.tsx'],
|
|
33
|
+
moduleDirectory: ['node_modules', 'src', 'demo'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
rules: {
|
|
39
|
+
'@typescript-eslint/no-unsafe-function-type': 'warn',
|
|
40
|
+
'@typescript-eslint/no-unused-vars': 'warn',
|
|
41
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
ignores: ['**/*.js', '**/*.mjs', '**/*.d.ts'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
files: ['**/*.test.ts'],
|
|
49
|
+
rules: {
|
|
50
|
+
'@typescript-eslint/no-unused-expressions': 'off',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
];
|
package/index.html
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en-GB">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<style>
|
|
7
|
-
html {
|
|
8
|
-
font-size: 10px; /* This is to match petabox's base font size */
|
|
9
|
-
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
body {
|
|
13
|
-
background: #F5F5F7;
|
|
14
|
-
color: #2C2C2C;
|
|
15
|
-
line-height: 1.42857143; /* Same as production */
|
|
16
|
-
}
|
|
17
|
-
</style>
|
|
18
|
-
|
|
19
|
-
</head>
|
|
20
|
-
<body>
|
|
21
|
-
<app-root></app-root>
|
|
22
|
-
<script type="module" src="./src/app-root"></script>
|
|
23
|
-
</body>
|
|
24
|
-
</html>
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en-GB">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
+
<style>
|
|
7
|
+
html {
|
|
8
|
+
font-size: 10px; /* This is to match petabox's base font size */
|
|
9
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
body {
|
|
13
|
+
background: #F5F5F7;
|
|
14
|
+
color: #2C2C2C;
|
|
15
|
+
line-height: 1.42857143; /* Same as production */
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
18
|
+
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<app-root></app-root>
|
|
22
|
+
<script type="module" src="./src/app-root"></script>
|
|
23
|
+
</body>
|
|
24
|
+
</html>
|