@internetarchive/collection-browser 4.0.2-alpha-webdev8209.0 → 4.1.0-alpha-webdev8164.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +27 -27
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/.prettierignore +1 -1
  8. package/LICENSE +661 -661
  9. package/README.md +83 -83
  10. package/dist/index.d.ts +0 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/src/app-root.js +614 -614
  13. package/dist/src/app-root.js.map +1 -1
  14. package/dist/src/collection-browser.js +764 -764
  15. package/dist/src/collection-browser.js.map +1 -1
  16. package/dist/src/collection-facets/facets-template.js +5 -0
  17. package/dist/src/collection-facets/facets-template.js.map +1 -1
  18. package/dist/src/collection-facets/more-facets-content.d.ts +47 -8
  19. package/dist/src/collection-facets/more-facets-content.js +460 -161
  20. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  21. package/dist/src/collection-facets/more-facets-pagination.d.ts +10 -0
  22. package/dist/src/collection-facets/more-facets-pagination.js +64 -1
  23. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
  24. package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
  25. package/dist/src/models.js.map +1 -1
  26. package/dist/src/tiles/grid/collection-tile.js +89 -89
  27. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  28. package/dist/src/tiles/grid/item-tile.js +138 -138
  29. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  30. package/dist/src/tiles/hover/hover-pane-controller.js +28 -28
  31. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  32. package/dist/src/tiles/models.js.map +1 -1
  33. package/dist/src/tiles/tile-dispatcher.js +216 -216
  34. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  35. package/dist/test/collection-browser.test.js +189 -189
  36. package/dist/test/collection-browser.test.js.map +1 -1
  37. package/dist/test/collection-facets/more-facets-content.test.js +154 -3
  38. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  39. package/dist/test/collection-facets/more-facets-pagination.test.js +60 -0
  40. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
  41. package/eslint.config.mjs +53 -53
  42. package/index.html +24 -24
  43. package/index.ts +0 -1
  44. package/local.archive.org.cert +86 -86
  45. package/local.archive.org.key +27 -27
  46. package/package.json +121 -121
  47. package/renovate.json +6 -6
  48. package/src/app-root.ts +1166 -1166
  49. package/src/collection-browser.ts +3075 -3075
  50. package/src/collection-facets/facets-template.ts +5 -0
  51. package/src/collection-facets/more-facets-content.ts +961 -644
  52. package/src/collection-facets/more-facets-pagination.ts +73 -1
  53. package/src/data-source/collection-browser-query-state.ts +59 -59
  54. package/src/models.ts +873 -873
  55. package/src/tiles/grid/collection-tile.ts +184 -184
  56. package/src/tiles/grid/item-tile.ts +346 -346
  57. package/src/tiles/hover/hover-pane-controller.ts +627 -627
  58. package/src/tiles/models.ts +8 -8
  59. package/src/tiles/tile-dispatcher.ts +518 -518
  60. package/test/collection-browser.test.ts +2413 -2413
  61. package/test/collection-facets/more-facets-content.test.ts +218 -3
  62. package/test/collection-facets/more-facets-pagination.test.ts +84 -0
  63. package/tsconfig.json +25 -25
  64. package/web-dev-server.config.mjs +30 -30
  65. package/web-test-runner.config.mjs +52 -52
@@ -3,6 +3,7 @@ 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';
6
7
  const selectedFacetsGroup = {
7
8
  title: 'Media Type',
8
9
  key: 'mediatype',
@@ -38,16 +39,23 @@ describe('More facets content', () => {
38
39
  await el.updateComplete;
39
40
  expect(el.shadowRoot?.querySelector('.facets-loader')).to.exist;
40
41
  });
41
- it('should render pagination for more facets', async () => {
42
+ it('should NOT render pagination when facet count < 1000', async () => {
42
43
  const searchService = new MockSearchService();
43
44
  const el = await fixture(html `<more-facets-content
44
45
  .searchService=${searchService}
45
46
  ></more-facets-content>`);
46
47
  el.facetKey = 'year';
47
- el.query = 'more-facets'; // Produces a response with 40+ aggregations for multiple pages
48
+ el.query = 'more-facets'; // Produces a response with 45 aggregations (< 1000)
48
49
  await el.updateComplete;
49
50
  await aTimeout(50); // Give it a moment to perform the (mock) search query after the initial update
50
- expect(el.shadowRoot?.querySelectorAll('more-facets-pagination')).to.exist;
51
+ // Verify pagination component is NOT present (horizontal scroll mode)
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;
51
59
  });
52
60
  it('query for more facets content using search service', async () => {
53
61
  const searchService = new MockSearchService();
@@ -155,5 +163,148 @@ describe('More facets content', () => {
155
163
  expect(mockAnalyticsHandler.callAction).to.equal('applyMoreFacetsModal');
156
164
  expect(mockAnalyticsHandler.callLabel).to.equal('collection');
157
165
  });
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
+ it('should show clear button when filter text is present', async () => {
265
+ const searchService = new MockSearchService();
266
+ const el = await fixture(html `<more-facets-content
267
+ .facetKey=${'year'}
268
+ .query=${'more-facets'}
269
+ .searchService=${searchService}
270
+ .selectedFacets=${yearSelectedFacets}
271
+ ></more-facets-content>`);
272
+ await el.updateComplete;
273
+ await aTimeout(50);
274
+ // Initially, no clear button should exist
275
+ expect(el.shadowRoot?.querySelector('.filter-clear-btn')).to.not.exist;
276
+ // Type into the filter input
277
+ const filterInput = el.shadowRoot?.querySelector('#facet-filter');
278
+ expect(filterInput).to.exist;
279
+ filterInput.value = 'test';
280
+ filterInput.dispatchEvent(new Event('input'));
281
+ await el.updateComplete;
282
+ // Now clear button should exist
283
+ expect(el.shadowRoot?.querySelector('.filter-clear-btn')).to.exist;
284
+ });
285
+ it('should clear filter text when clear button is clicked', async () => {
286
+ const searchService = new MockSearchService();
287
+ const el = await fixture(html `<more-facets-content
288
+ .facetKey=${'year'}
289
+ .query=${'more-facets'}
290
+ .searchService=${searchService}
291
+ .selectedFacets=${yearSelectedFacets}
292
+ ></more-facets-content>`);
293
+ await el.updateComplete;
294
+ await aTimeout(50);
295
+ // Type into the filter input
296
+ const filterInput = el.shadowRoot?.querySelector('#facet-filter');
297
+ filterInput.value = 'test';
298
+ filterInput.dispatchEvent(new Event('input'));
299
+ await el.updateComplete;
300
+ // Click the clear button
301
+ const clearBtn = el.shadowRoot?.querySelector('.filter-clear-btn');
302
+ expect(clearBtn).to.exist;
303
+ clearBtn.click();
304
+ await el.updateComplete;
305
+ // Filter input should be empty and clear button should be gone
306
+ expect(filterInput.value).to.equal('');
307
+ expect(el.shadowRoot?.querySelector('.filter-clear-btn')).to.not.exist;
308
+ });
158
309
  });
159
310
  //# 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';\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"]}
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';\nimport { Aggregation, type Bucket } from '@internetarchive/search-service';\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 NOT render pagination when facet count < 1000', 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 45 aggregations (< 1000)\n await el.updateComplete;\n await aTimeout(50); // Give it a moment to perform the (mock) search query after the initial update\n\n // Verify pagination component is NOT present (horizontal scroll mode)\n expect(el.shadowRoot?.querySelector('more-facets-pagination')).to.not.exist;\n\n // Verify horizontal scroll mode CSS class is applied\n expect(\n el.shadowRoot?.querySelector('.facets-content.horizontal-scroll-mode'),\n ).to.exist;\n\n // Verify footer still exists with buttons\n expect(el.shadowRoot?.querySelector('.footer')).to.exist;\n expect(el.shadowRoot?.querySelector('.btn-cancel')).to.exist;\n expect(el.shadowRoot?.querySelector('.btn-submit')).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 it('should have horizontal scrolling enabled', 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';\n await el.updateComplete;\n await aTimeout(50);\n\n const facetsContent = el.shadowRoot?.querySelector(\n '.facets-content',\n ) as HTMLElement;\n const styles = window.getComputedStyle(facetsContent);\n\n expect(styles.overflowX).to.equal('auto');\n expect(styles.overflowY).to.equal('hidden');\n });\n\n it('should have horizontal container wrapper', 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';\n await el.updateComplete;\n await aTimeout(50);\n\n const container = el.shadowRoot?.querySelector(\n '.facets-horizontal-container',\n );\n expect(container).to.exist;\n\n const facetsTemplate = container?.querySelector('facets-template');\n expect(facetsTemplate).to.exist;\n });\n\n it('should render pagination when facet count >= 1000', async () => {\n // Manually create aggregations with 1000+ facets\n const buckets: Bucket[] = [];\n for (let i = 0; i < 1000; i++) {\n buckets.push({ key: `value-${i}`, doc_count: i + 1 });\n }\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .facetKey=${'subject'}\n .selectedFacets=${{\n mediatype: {},\n lending: {},\n year: {},\n subject: {},\n collection: {},\n creator: {},\n language: {},\n }}\n ></more-facets-content>`,\n );\n\n // @ts-expect-error - accessing private property for testing\n el.aggregations = {\n subject: new Aggregation({ buckets }),\n };\n el.facetsLoading = false;\n await el.updateComplete;\n\n // Verify pagination component IS present\n expect(el.shadowRoot?.querySelector('more-facets-pagination')).to.exist;\n\n // Verify pagination mode CSS class is applied\n expect(el.shadowRoot?.querySelector('.facets-content.pagination-mode')).to\n .exist;\n\n // Verify horizontal container wrapper does NOT exist in pagination mode\n expect(el.shadowRoot?.querySelector('.facets-horizontal-container')).to.not\n .exist;\n });\n\n it('pagination page change should send analytics event', async () => {\n const mockAnalyticsHandler = new MockAnalyticsHandler();\n\n // Manually create aggregations with 1000+ facets\n const buckets: Bucket[] = [];\n for (let i = 0; i < 1000; i++) {\n buckets.push({ key: `value-${i}`, doc_count: i + 1 });\n }\n\n const el = await fixture<MoreFacetsContent>(\n html`<more-facets-content\n .facetKey=${'subject'}\n .selectedFacets=${{\n mediatype: {},\n lending: {},\n year: {},\n subject: {},\n collection: {},\n creator: {},\n language: {},\n }}\n .analyticsHandler=${mockAnalyticsHandler}\n ></more-facets-content>`,\n );\n\n // @ts-expect-error - accessing private property for testing\n el.aggregations = {\n subject: new Aggregation({ buckets }),\n };\n el.facetsLoading = false;\n await el.updateComplete;\n\n // Get the pagination component\n const pagination = el.shadowRoot?.querySelector(\n 'more-facets-pagination',\n ) as any;\n expect(pagination).to.exist;\n\n // Simulate clicking page 2\n pagination.currentPage = 2;\n await pagination.updateComplete;\n\n // Verify analytics event was sent\n expect(mockAnalyticsHandler.callCategory).to.equal('collection-browser');\n expect(mockAnalyticsHandler.callAction).to.equal('moreFacetsPageChange');\n expect(mockAnalyticsHandler.callLabel).to.equal('2');\n });\n\n it('should show clear button when filter text is present', 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 await el.updateComplete;\n await aTimeout(50);\n\n // Initially, no clear button should exist\n expect(el.shadowRoot?.querySelector('.filter-clear-btn')).to.not.exist;\n\n // Type into the filter input\n const filterInput = el.shadowRoot?.querySelector(\n '#facet-filter',\n ) as HTMLInputElement;\n expect(filterInput).to.exist;\n\n filterInput.value = 'test';\n filterInput.dispatchEvent(new Event('input'));\n await el.updateComplete;\n\n // Now clear button should exist\n expect(el.shadowRoot?.querySelector('.filter-clear-btn')).to.exist;\n });\n\n it('should clear filter text when clear button is clicked', 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 await el.updateComplete;\n await aTimeout(50);\n\n // Type into the filter input\n const filterInput = el.shadowRoot?.querySelector(\n '#facet-filter',\n ) as HTMLInputElement;\n filterInput.value = 'test';\n filterInput.dispatchEvent(new Event('input'));\n await el.updateComplete;\n\n // Click the clear button\n const clearBtn = el.shadowRoot?.querySelector(\n '.filter-clear-btn',\n ) as HTMLButtonElement;\n expect(clearBtn).to.exist;\n clearBtn.click();\n await el.updateComplete;\n\n // Filter input should be empty and clear button should be gone\n expect(filterInput.value).to.equal('');\n expect(el.shadowRoot?.querySelector('.filter-clear-btn')).to.not.exist;\n });\n});\n"]}
@@ -122,5 +122,65 @@ describe('More facets pagination', () => {
122
122
  expect(el.currentPage).to.equal(6); // brings us forward 1 page
123
123
  });
124
124
  });
125
+ describe('Compact mode', () => {
126
+ it('shows all pages when size <= 3', async () => {
127
+ const el = await fixture(html `<more-facets-pagination
128
+ .size=${3}
129
+ .compact=${true}
130
+ ></more-facets-pagination>`);
131
+ await el.updateComplete;
132
+ expect(el.pages).to.deep.equal([1, 2, 3]);
133
+ });
134
+ it('shows first, prev, current, next, ..., last for middle page', async () => {
135
+ const el = await fixture(html `<more-facets-pagination
136
+ .size=${20}
137
+ .currentPage=${10}
138
+ .compact=${true}
139
+ ></more-facets-pagination>`);
140
+ await el.updateComplete;
141
+ // first, ..., prev, current, next, ..., last
142
+ expect(el.pages).to.deep.equal([1, 0, 9, 10, 11, 0, 20]);
143
+ });
144
+ it('shows correct pages when on page 1', async () => {
145
+ const el = await fixture(html `<more-facets-pagination
146
+ .size=${20}
147
+ .currentPage=${1}
148
+ .compact=${true}
149
+ ></more-facets-pagination>`);
150
+ await el.updateComplete;
151
+ // first (current), next, ..., last
152
+ expect(el.pages).to.deep.equal([1, 2, 0, 20]);
153
+ });
154
+ it('shows correct pages when on last page', async () => {
155
+ const el = await fixture(html `<more-facets-pagination
156
+ .size=${20}
157
+ .currentPage=${20}
158
+ .compact=${true}
159
+ ></more-facets-pagination>`);
160
+ await el.updateComplete;
161
+ // first, ..., prev, last (current)
162
+ expect(el.pages).to.deep.equal([1, 0, 19, 20]);
163
+ });
164
+ it('shows correct pages when on page 2', async () => {
165
+ const el = await fixture(html `<more-facets-pagination
166
+ .size=${20}
167
+ .currentPage=${2}
168
+ .compact=${true}
169
+ ></more-facets-pagination>`);
170
+ await el.updateComplete;
171
+ // first, current, next, ..., last
172
+ expect(el.pages).to.deep.equal([1, 2, 3, 0, 20]);
173
+ });
174
+ it('shows correct pages when on second-to-last page', async () => {
175
+ const el = await fixture(html `<more-facets-pagination
176
+ .size=${20}
177
+ .currentPage=${19}
178
+ .compact=${true}
179
+ ></more-facets-pagination>`);
180
+ await el.updateComplete;
181
+ // first, ..., prev, current, last
182
+ expect(el.pages).to.deep.equal([1, 0, 18, 19, 20]);
183
+ });
184
+ });
125
185
  });
126
186
  //# sourceMappingURL=more-facets-pagination.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"more-facets-pagination.test.js","sourceRoot":"","sources":["../../../test/collection-facets/more-facets-pagination.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport '../../src/collection-facets/more-facets-pagination';\nimport type { MoreFacetsPagination } from '../../src/collection-facets/more-facets-pagination';\n\nafterEach(() => {\n sinon.restore();\n});\n\ndescribe('More facets pagination', () => {\n describe('5 pages or less', () => {\n it('shows all pages', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${5}></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n const pageButtons = el.shadowRoot?.querySelectorAll(\n 'button[data-page]',\n ) as NodeList;\n expect(pageButtons.length).to.greaterThan(0);\n\n pageButtons.forEach((button, index) => {\n expect(button.textContent).to.contain(index + 1);\n });\n });\n });\n\n it('should render pagination template', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${10}></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-pagination')).to.exist;\n expect(el.shadowRoot?.querySelector('.arrow-icon')).to.exist;\n });\n\n it('should render page numbers', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${3}></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n const pageNumberElement = el.shadowRoot?.querySelector('.page-numbers');\n expect(pageNumberElement).to.exist;\n expect(pageNumberElement?.querySelectorAll('button').length).to.equal(3);\n });\n\n it('check current page and total pages', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${4}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n const pageNumberElement = el.shadowRoot?.querySelector('.page-numbers');\n expect(pageNumberElement).to.exist;\n expect(\n pageNumberElement\n ?.querySelectorAll('button')[1]\n .classList.contains('current'),\n ).to.be.true;\n expect(el.pages?.length).to.equal(4);\n });\n\n it('get page numbers based of size and currentPage', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${4}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n expect(el.pages?.length).to.equal(4);\n });\n\n describe('Selecting a page', () => {\n it('fires event', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n setTimeout(() =>\n el.dispatchEvent(\n new CustomEvent('pageNumberClicked', { detail: { page: 15 } }),\n ),\n );\n const { detail } = await oneEvent(el, 'pageNumberClicked');\n expect(detail?.page).to.equal(15);\n });\n it('sets off side effects with `onChange`', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n expect(el.currentPage).to.equal(2); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const pageButton = el.shadowRoot?.querySelector(\n '.page-numbers > button',\n ) as HTMLButtonElement;\n // confirm button isn't selected\n expect(pageButton.classList.contains('current')).to.be.false;\n pageButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(1); // brings us back to currentPage\n // confirm button is selected\n expect(pageButton.classList.contains('current')).to.be.true;\n });\n });\n\n describe('Using Arrows', () => {\n it('going backwards', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n expect(el.currentPage).to.equal(2); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const rewindButton = el.shadowRoot?.querySelector(\n '.facets-pagination > button.rewind',\n ) as HTMLButtonElement;\n rewindButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(1); // brings us back 1 page\n // confirm button is selected\n expect(\n (\n el.shadowRoot?.querySelector(\n '.page-numbers > button[data-page=\"1\"]',\n ) as HTMLButtonElement\n ).classList.contains('current'),\n ).to.be.true;\n });\n\n it('going forwards', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${5}\n ></more-facets-pagination>`,\n );\n\n expect(el.currentPage).to.equal(5); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const forwardButton = el.shadowRoot?.querySelector(\n '.facets-pagination > button.forward',\n ) as HTMLButtonElement;\n forwardButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(6); // brings us forward 1 page\n });\n });\n});\n"]}
1
+ {"version":3,"file":"more-facets-pagination.test.js","sourceRoot":"","sources":["../../../test/collection-facets/more-facets-pagination.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, oneEvent } from '@open-wc/testing';\nimport { html } from 'lit';\nimport sinon from 'sinon';\nimport '../../src/collection-facets/more-facets-pagination';\nimport type { MoreFacetsPagination } from '../../src/collection-facets/more-facets-pagination';\n\nafterEach(() => {\n sinon.restore();\n});\n\ndescribe('More facets pagination', () => {\n describe('5 pages or less', () => {\n it('shows all pages', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${5}></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n const pageButtons = el.shadowRoot?.querySelectorAll(\n 'button[data-page]',\n ) as NodeList;\n expect(pageButtons.length).to.greaterThan(0);\n\n pageButtons.forEach((button, index) => {\n expect(button.textContent).to.contain(index + 1);\n });\n });\n });\n\n it('should render pagination template', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${10}></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.facets-pagination')).to.exist;\n expect(el.shadowRoot?.querySelector('.arrow-icon')).to.exist;\n });\n\n it('should render page numbers', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination .size=${3}></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n const pageNumberElement = el.shadowRoot?.querySelector('.page-numbers');\n expect(pageNumberElement).to.exist;\n expect(pageNumberElement?.querySelectorAll('button').length).to.equal(3);\n });\n\n it('check current page and total pages', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${4}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n const pageNumberElement = el.shadowRoot?.querySelector('.page-numbers');\n expect(pageNumberElement).to.exist;\n expect(\n pageNumberElement\n ?.querySelectorAll('button')[1]\n .classList.contains('current'),\n ).to.be.true;\n expect(el.pages?.length).to.equal(4);\n });\n\n it('get page numbers based of size and currentPage', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${4}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n expect(el.pages?.length).to.equal(4);\n });\n\n describe('Selecting a page', () => {\n it('fires event', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n\n setTimeout(() =>\n el.dispatchEvent(\n new CustomEvent('pageNumberClicked', { detail: { page: 15 } }),\n ),\n );\n const { detail } = await oneEvent(el, 'pageNumberClicked');\n expect(detail?.page).to.equal(15);\n });\n it('sets off side effects with `onChange`', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n expect(el.currentPage).to.equal(2); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const pageButton = el.shadowRoot?.querySelector(\n '.page-numbers > button',\n ) as HTMLButtonElement;\n // confirm button isn't selected\n expect(pageButton.classList.contains('current')).to.be.false;\n pageButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(1); // brings us back to currentPage\n // confirm button is selected\n expect(pageButton.classList.contains('current')).to.be.true;\n });\n });\n\n describe('Using Arrows', () => {\n it('going backwards', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${2}\n ></more-facets-pagination>`,\n );\n\n expect(el.currentPage).to.equal(2); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const rewindButton = el.shadowRoot?.querySelector(\n '.facets-pagination > button.rewind',\n ) as HTMLButtonElement;\n rewindButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(1); // brings us back 1 page\n // confirm button is selected\n expect(\n (\n el.shadowRoot?.querySelector(\n '.page-numbers > button[data-page=\"1\"]',\n ) as HTMLButtonElement\n ).classList.contains('current'),\n ).to.be.true;\n });\n\n it('going forwards', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${'10'}\n .currentPage=${5}\n ></more-facets-pagination>`,\n );\n\n expect(el.currentPage).to.equal(5); // confirm current page\n\n const fake1 = sinon.fake();\n const fake2 = sinon.fake();\n el.observePageCount = fake1;\n el.emitPageClick = fake2;\n\n // select first page button\n const forwardButton = el.shadowRoot?.querySelector(\n '.facets-pagination > button.forward',\n ) as HTMLButtonElement;\n forwardButton.click();\n\n await el.updateComplete;\n\n expect(fake1.callCount).to.equal(1);\n expect(fake2.callCount).to.equal(1);\n expect(el.currentPage).to.equal(6); // brings us forward 1 page\n });\n });\n\n describe('Compact mode', () => {\n it('shows all pages when size <= 3', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${3}\n .compact=${true}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n expect(el.pages).to.deep.equal([1, 2, 3]);\n });\n\n it('shows first, prev, current, next, ..., last for middle page', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${20}\n .currentPage=${10}\n .compact=${true}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n // first, ..., prev, current, next, ..., last\n expect(el.pages).to.deep.equal([1, 0, 9, 10, 11, 0, 20]);\n });\n\n it('shows correct pages when on page 1', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${20}\n .currentPage=${1}\n .compact=${true}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n // first (current), next, ..., last\n expect(el.pages).to.deep.equal([1, 2, 0, 20]);\n });\n\n it('shows correct pages when on last page', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${20}\n .currentPage=${20}\n .compact=${true}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n // first, ..., prev, last (current)\n expect(el.pages).to.deep.equal([1, 0, 19, 20]);\n });\n\n it('shows correct pages when on page 2', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${20}\n .currentPage=${2}\n .compact=${true}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n // first, current, next, ..., last\n expect(el.pages).to.deep.equal([1, 2, 3, 0, 20]);\n });\n\n it('shows correct pages when on second-to-last page', async () => {\n const el = await fixture<MoreFacetsPagination>(\n html`<more-facets-pagination\n .size=${20}\n .currentPage=${19}\n .compact=${true}\n ></more-facets-pagination>`,\n );\n\n await el.updateComplete;\n // first, ..., prev, current, last\n expect(el.pages).to.deep.equal([1, 0, 18, 19, 20]);\n });\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>
package/index.ts CHANGED
@@ -18,7 +18,6 @@ export { ItemTile } from './src/tiles/grid/item-tile';
18
18
  export { TileList } from './src/tiles/list/tile-list';
19
19
  export { TileListCompact } from './src/tiles/list/tile-list-compact';
20
20
  export { TileDispatcher } from './src/tiles/tile-dispatcher';
21
- export { LayoutType } from './src/tiles/models';
22
21
  export {
23
22
  SmartQueryHeuristic,
24
23
  KeywordFacetMap,