@internetarchive/collection-browser 0.2.20 → 0.2.22-rc1

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 (70) hide show
  1. package/dist/src/app-root.d.ts +1 -0
  2. package/dist/src/app-root.js +34 -4
  3. package/dist/src/app-root.js.map +1 -1
  4. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -0
  5. package/dist/src/assets/img/icons/arrow-left.js +10 -0
  6. package/dist/src/assets/img/icons/arrow-left.js.map +1 -0
  7. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
  8. package/dist/src/assets/img/icons/arrow-right.js +10 -0
  9. package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
  10. package/dist/src/collection-browser.d.ts +4 -0
  11. package/dist/src/collection-browser.js +24 -11
  12. package/dist/src/collection-browser.js.map +1 -1
  13. package/dist/src/collection-facets/facets-template.d.ts +16 -0
  14. package/dist/src/collection-facets/facets-template.js +266 -0
  15. package/dist/src/collection-facets/facets-template.js.map +1 -0
  16. package/dist/src/collection-facets/facets-util.d.ts +10 -0
  17. package/dist/src/collection-facets/facets-util.js +20 -0
  18. package/dist/src/collection-facets/facets-util.js.map +1 -0
  19. package/dist/src/collection-facets/more-facets-content.d.ts +83 -0
  20. package/dist/src/collection-facets/more-facets-content.js +475 -0
  21. package/dist/src/collection-facets/more-facets-content.js.map +1 -0
  22. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -0
  23. package/dist/src/collection-facets/more-facets-pagination.js +267 -0
  24. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -0
  25. package/dist/src/collection-facets.d.ts +19 -5
  26. package/dist/src/collection-facets.js +138 -239
  27. package/dist/src/collection-facets.js.map +1 -1
  28. package/dist/src/models.d.ts +4 -1
  29. package/dist/src/models.js +24 -0
  30. package/dist/src/models.js.map +1 -1
  31. package/dist/src/restoration-state-handler.js +5 -6
  32. package/dist/src/restoration-state-handler.js.map +1 -1
  33. package/dist/src/tiles/collection-browser-loading-tile.js +2 -5
  34. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -1
  35. package/dist/test/collection-browser.test.js +29 -12
  36. package/dist/test/collection-browser.test.js.map +1 -1
  37. package/dist/test/collection-facets/facets-template.test.d.ts +1 -0
  38. package/dist/test/collection-facets/facets-template.test.js +75 -0
  39. package/dist/test/collection-facets/facets-template.test.js.map +1 -0
  40. package/dist/test/collection-facets/facets-util.test.d.ts +1 -0
  41. package/dist/test/collection-facets/facets-util.test.js +13 -0
  42. package/dist/test/collection-facets/facets-util.test.js.map +1 -0
  43. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -0
  44. package/dist/test/collection-facets/more-facets-content.test.js +104 -0
  45. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -0
  46. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -0
  47. package/dist/test/collection-facets/more-facets-pagination.test.js +133 -0
  48. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -0
  49. package/dist/test/collection-facets.test.d.ts +1 -0
  50. package/dist/test/collection-facets.test.js +98 -33
  51. package/dist/test/collection-facets.test.js.map +1 -1
  52. package/package.json +11 -4
  53. package/src/app-root.ts +34 -4
  54. package/src/assets/img/icons/arrow-left.ts +10 -0
  55. package/src/assets/img/icons/arrow-right.ts +10 -0
  56. package/src/collection-browser.ts +22 -11
  57. package/src/collection-facets/facets-template.ts +284 -0
  58. package/src/collection-facets/facets-util.ts +22 -0
  59. package/src/collection-facets/more-facets-content.ts +529 -0
  60. package/src/collection-facets/more-facets-pagination.ts +297 -0
  61. package/src/collection-facets.ts +175 -261
  62. package/src/models.ts +28 -1
  63. package/src/restoration-state-handler.ts +7 -6
  64. package/src/tiles/collection-browser-loading-tile.ts +2 -5
  65. package/test/collection-browser.test.ts +37 -12
  66. package/test/collection-facets/facets-template.test.ts +103 -0
  67. package/test/collection-facets/facets-util.test.ts +18 -0
  68. package/test/collection-facets/more-facets-content.test.ts +146 -0
  69. package/test/collection-facets/more-facets-pagination.test.ts +202 -0
  70. package/test/collection-facets.test.ts +127 -44
@@ -1,11 +1,34 @@
1
1
  /* eslint-disable import/no-duplicates */
2
2
  import { expect, fixture } from '@open-wc/testing';
3
+ import sinon from 'sinon';
3
4
  import { html } from 'lit';
4
5
  import type { Aggregation } from '@internetarchive/search-service';
6
+ import {
7
+ ModalManager,
8
+ ModalManagerInterface,
9
+ } from '@internetarchive/modal-manager';
5
10
  import type { CollectionFacets } from '../src/collection-facets';
11
+ import '@internetarchive/modal-manager';
6
12
  import '../src/collection-facets';
13
+ import type { FacetOption } from '../src/models';
7
14
 
8
15
  describe('Collection Facets', () => {
16
+ it('has loader', async () => {
17
+ const el = await fixture<CollectionFacets>(
18
+ html`<collection-facets ?facetsLoading=${true}></collection-facets>`
19
+ );
20
+
21
+ expect(
22
+ el.shadowRoot?.querySelector('#container')?.classList.contains('loading')
23
+ ).to.be.true;
24
+
25
+ el.facetsLoading = false;
26
+ await el.updateComplete;
27
+
28
+ expect(
29
+ el.shadowRoot?.querySelector('#container')?.classList.contains('loading')
30
+ ).to.be.false;
31
+ });
9
32
  it('renders aggregations as facets', async () => {
10
33
  const el = await fixture<CollectionFacets>(
11
34
  html`<collection-facets></collection-facets>`
@@ -24,15 +47,16 @@ describe('Collection Facets', () => {
24
47
 
25
48
  el.aggregations = aggs;
26
49
  await el.updateComplete;
27
-
28
50
  const facetGroups = el.shadowRoot?.querySelectorAll('.facet-group');
29
51
  expect(facetGroups?.length).to.equal(1);
30
52
 
31
53
  const titleFacetGroup = facetGroups?.[0];
32
54
  const facetGroupHeader = titleFacetGroup?.querySelector('h1');
33
55
  expect(facetGroupHeader?.textContent?.trim()).to.equal('Subject');
34
-
35
- const titleFacetRow = titleFacetGroup?.querySelector('.facet-row');
56
+ const titleFacetRow = titleFacetGroup
57
+ ?.querySelector('facets-template')
58
+ ?.shadowRoot?.querySelector('.facet-row');
59
+ console.log(titleFacetGroup?.querySelector('facets-template'));
36
60
  expect(titleFacetRow?.textContent?.trim()).to.satisfy((text: string) =>
37
61
  /^foo\s*5$/.test(text)
38
62
  );
@@ -88,9 +112,9 @@ describe('Collection Facets', () => {
88
112
  el.aggregations = aggs;
89
113
  await el.updateComplete;
90
114
 
91
- const collectionName = el.shadowRoot?.querySelector(
92
- 'async-collection-name'
93
- );
115
+ const collectionName = el.shadowRoot
116
+ ?.querySelector('facets-template')
117
+ ?.shadowRoot?.querySelector('async-collection-name');
94
118
  expect(collectionName?.parentElement).to.be.instanceOf(HTMLAnchorElement);
95
119
  expect(collectionName?.parentElement?.getAttribute('href')).to.equal(
96
120
  '/details/foo'
@@ -116,48 +140,107 @@ describe('Collection Facets', () => {
116
140
  el.aggregations = aggs;
117
141
  await el.updateComplete;
118
142
 
119
- const collectionName = el.shadowRoot?.querySelector(
120
- 'async-collection-name'
121
- );
143
+ const collectionName = el.shadowRoot
144
+ ?.querySelector('facets-template')
145
+ ?.shadowRoot?.querySelector('async-collection-name');
122
146
  expect(collectionName?.parentElement).to.not.be.instanceOf(
123
147
  HTMLAnchorElement
124
148
  );
125
149
  });
126
150
 
127
- it('toggles selected facets on click', async () => {
128
- const el = await fixture<CollectionFacets>(
129
- html`<collection-facets></collection-facets>`
130
- );
131
-
132
- const aggs: Record<string, Aggregation> = {
133
- 'user_aggs__terms__field:subjectSorter__size:1': {
134
- buckets: [
135
- {
136
- key: 'foo',
137
- doc_count: 5,
138
- },
139
- ],
140
- },
141
- };
142
-
143
- el.aggregations = aggs;
144
- await el.updateComplete;
145
-
146
- const checkbox = el.shadowRoot?.querySelector(
147
- '.select-facet-checkbox'
148
- ) as HTMLInputElement;
149
- expect(checkbox.checked).to.be.false;
150
-
151
- // Select the facet
152
- checkbox?.click();
153
- await el.updateComplete;
154
-
155
- expect(el.selectedFacets?.subject.foo).to.equal('selected');
156
-
157
- // Unselect the facet
158
- checkbox?.click();
159
- await el.updateComplete;
160
-
161
- expect(el.selectedFacets?.subject.foo).to.be.undefined;
151
+ describe('More Facets', () => {
152
+ it('Does not render < allowedFacetCount', async () => {
153
+ const el = await fixture<CollectionFacets>(
154
+ html`<collection-facets></collection-facets>`
155
+ );
156
+
157
+ const aggs: Record<string, Aggregation> = {
158
+ 'user_aggs__terms__field:subjectSorter__size:1': {
159
+ buckets: [
160
+ {
161
+ key: 'foo',
162
+ doc_count: 5,
163
+ },
164
+ ],
165
+ },
166
+ };
167
+
168
+ el.aggregations = aggs;
169
+ await el.updateComplete;
170
+
171
+ const moreLink = el.shadowRoot?.querySelector('.more-link');
172
+ expect(moreLink).to.be.null;
173
+ });
174
+ it('Render More Facets', async () => {
175
+ const el = await fixture<CollectionFacets>(
176
+ html`<collection-facets
177
+ .modalManager=${new ModalManager()}
178
+ ></collection-facets>`
179
+ );
180
+
181
+ const aggs: Record<string, Aggregation> = {
182
+ 'user_aggs__terms__field:subjectSorter__size:1': {
183
+ buckets: [
184
+ {
185
+ key: 'foo',
186
+ doc_count: 5,
187
+ },
188
+ {
189
+ key: 'fi',
190
+ doc_count: 5,
191
+ },
192
+ {
193
+ key: 'fum',
194
+ doc_count: 5,
195
+ },
196
+ {
197
+ key: 'flee',
198
+ doc_count: 5,
199
+ },
200
+ {
201
+ key: 'wheee',
202
+ doc_count: 5,
203
+ },
204
+ {
205
+ key: 'whooo',
206
+ doc_count: 5,
207
+ },
208
+ {
209
+ key: 'boop',
210
+ doc_count: 5,
211
+ },
212
+ ],
213
+ },
214
+ };
215
+
216
+ el.aggregations = aggs;
217
+ await el.updateComplete;
218
+
219
+ let eventCaught = false;
220
+ let eventFacet = '';
221
+ el.addEventListener('showMoreFacets', e => {
222
+ eventFacet = (e as CustomEvent).detail;
223
+ eventCaught = true;
224
+ });
225
+
226
+ const moreLink = el.shadowRoot?.querySelector(
227
+ '.more-link'
228
+ ) as HTMLButtonElement;
229
+ expect(moreLink).to.exist; // has link
230
+
231
+ const showModalSpy = sinon.spy(
232
+ el.modalManager as ModalManagerInterface,
233
+ 'showModal'
234
+ );
235
+ // let's pop up modal
236
+ moreLink?.click();
237
+ await el.updateComplete;
238
+
239
+ expect(showModalSpy.callCount).to.equal(1);
240
+ expect(el.modalManager?.classList.contains('more-search-facets')).to.be
241
+ .true;
242
+ expect(eventCaught).to.be.true;
243
+ expect(eventFacet).to.equal('subject' as FacetOption);
244
+ });
162
245
  });
163
246
  });