@internetarchive/collection-browser 3.4.1 → 3.5.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 (194) 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/src/app-root.js +19 -28
  11. package/dist/src/app-root.js.map +1 -1
  12. package/dist/src/collection-browser.d.ts +27 -4
  13. package/dist/src/collection-browser.js +973 -801
  14. package/dist/src/collection-browser.js.map +1 -1
  15. package/dist/src/collection-facets/facet-row.js +143 -143
  16. package/dist/src/collection-facets/facet-row.js.map +1 -1
  17. package/dist/src/collection-facets/more-facets-content.js +29 -40
  18. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  19. package/dist/src/collection-facets/more-facets-pagination.js +6 -10
  20. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
  21. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js +16 -21
  22. package/dist/src/collection-facets/smart-facets/heuristics/wikidata/wikidata-heuristic.js.map +1 -1
  23. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +7 -10
  24. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
  25. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +3 -2
  26. package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
  27. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +9 -11
  28. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
  29. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +7 -7
  30. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
  31. package/dist/src/collection-facets/toggle-switch.js +4 -6
  32. package/dist/src/collection-facets/toggle-switch.js.map +1 -1
  33. package/dist/src/collection-facets.js +309 -310
  34. package/dist/src/collection-facets.js.map +1 -1
  35. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +10 -1
  36. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
  37. package/dist/src/data-source/collection-browser-data-source.d.ts +19 -1
  38. package/dist/src/data-source/collection-browser-data-source.js +71 -65
  39. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  40. package/dist/src/data-source/collection-browser-query-state.d.ts +1 -2
  41. package/dist/src/data-source/collection-browser-query-state.js.map +1 -1
  42. package/dist/src/data-source/models.d.ts +11 -0
  43. package/dist/src/data-source/models.js.map +1 -1
  44. package/dist/src/empty-placeholder.js +19 -18
  45. package/dist/src/empty-placeholder.js.map +1 -1
  46. package/dist/src/expanded-date-picker.js +6 -10
  47. package/dist/src/expanded-date-picker.js.map +1 -1
  48. package/dist/src/language-code-handler/language-code-handler.js +2 -2
  49. package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
  50. package/dist/src/manage/manage-bar.js +9 -15
  51. package/dist/src/manage/manage-bar.js.map +1 -1
  52. package/dist/src/manage/remove-items-modal-content.js +2 -2
  53. package/dist/src/manage/remove-items-modal-content.js.map +1 -1
  54. package/dist/src/models.d.ts +2 -6
  55. package/dist/src/models.js +44 -54
  56. package/dist/src/models.js.map +1 -1
  57. package/dist/src/restoration-state-handler.d.ts +1 -2
  58. package/dist/src/restoration-state-handler.js +12 -19
  59. package/dist/src/restoration-state-handler.js.map +1 -1
  60. package/dist/src/sort-filter-bar/alpha-bar.js +9 -14
  61. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  62. package/dist/src/sort-filter-bar/sort-filter-bar.js +14 -24
  63. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  64. package/dist/src/tiles/base-tile-component.js +1 -2
  65. package/dist/src/tiles/base-tile-component.js.map +1 -1
  66. package/dist/src/tiles/grid/account-tile.js +5 -7
  67. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  68. package/dist/src/tiles/grid/collection-tile.js +3 -6
  69. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  70. package/dist/src/tiles/grid/item-tile.js +23 -33
  71. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  72. package/dist/src/tiles/grid/search-tile.js +1 -2
  73. package/dist/src/tiles/grid/search-tile.js.map +1 -1
  74. package/dist/src/tiles/grid/tile-stats.js +2 -3
  75. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  76. package/dist/src/tiles/hover/hover-pane-controller.js +21 -28
  77. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  78. package/dist/src/tiles/hover/tile-hover-pane.js +3 -4
  79. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
  80. package/dist/src/tiles/image-block.js +5 -8
  81. package/dist/src/tiles/image-block.js.map +1 -1
  82. package/dist/src/tiles/item-image.js +12 -19
  83. package/dist/src/tiles/item-image.js.map +1 -1
  84. package/dist/src/tiles/list/tile-list-compact.js +17 -25
  85. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  86. package/dist/src/tiles/list/tile-list.js +34 -55
  87. package/dist/src/tiles/list/tile-list.js.map +1 -1
  88. package/dist/src/tiles/overlay/icon-overlay.js +1 -2
  89. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
  90. package/dist/src/tiles/overlay/text-overlay.js +2 -4
  91. package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
  92. package/dist/src/tiles/text-snippet-block.js +2 -4
  93. package/dist/src/tiles/text-snippet-block.js.map +1 -1
  94. package/dist/src/tiles/tile-dispatcher.js +22 -30
  95. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  96. package/dist/src/tiles/tile-display-value-provider.js +5 -9
  97. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  98. package/dist/src/tiles/tile-mediatype-icon.js +12 -19
  99. package/dist/src/tiles/tile-mediatype-icon.js.map +1 -1
  100. package/dist/src/utils/collapse-repeated-quotes.js +1 -1
  101. package/dist/src/utils/collapse-repeated-quotes.js.map +1 -1
  102. package/dist/src/utils/facet-utils.js +3 -5
  103. package/dist/src/utils/facet-utils.js.map +1 -1
  104. package/dist/src/utils/format-count.js +10 -10
  105. package/dist/src/utils/format-count.js.map +1 -1
  106. package/dist/src/utils/resolve-mediatype.js +2 -3
  107. package/dist/src/utils/resolve-mediatype.js.map +1 -1
  108. package/dist/test/collection-browser.test.js +336 -380
  109. package/dist/test/collection-browser.test.js.map +1 -1
  110. package/dist/test/collection-facets/facet-row.test.js +37 -52
  111. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  112. package/dist/test/collection-facets/facets-template.test.js +17 -23
  113. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  114. package/dist/test/collection-facets/more-facets-content.test.js +22 -32
  115. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  116. package/dist/test/collection-facets/more-facets-pagination.test.js +16 -22
  117. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
  118. package/dist/test/collection-facets/toggle-switch.test.js +22 -19
  119. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
  120. package/dist/test/collection-facets.test.js +60 -77
  121. package/dist/test/collection-facets.test.js.map +1 -1
  122. package/dist/test/empty-placeholder.test.js +11 -17
  123. package/dist/test/empty-placeholder.test.js.map +1 -1
  124. package/dist/test/expanded-date-picker.test.js +8 -14
  125. package/dist/test/expanded-date-picker.test.js.map +1 -1
  126. package/dist/test/icon-overlay.test.js +7 -6
  127. package/dist/test/icon-overlay.test.js.map +1 -1
  128. package/dist/test/image-block.test.js +16 -26
  129. package/dist/test/image-block.test.js.map +1 -1
  130. package/dist/test/item-image.test.js +23 -32
  131. package/dist/test/item-image.test.js.map +1 -1
  132. package/dist/test/manage/manage-bar.test.js +21 -33
  133. package/dist/test/manage/manage-bar.test.js.map +1 -1
  134. package/dist/test/manage/remove-items-modal-content.test.js +10 -15
  135. package/dist/test/manage/remove-items-modal-content.test.js.map +1 -1
  136. package/dist/test/mocks/mock-search-service.js +2 -3
  137. package/dist/test/mocks/mock-search-service.js.map +1 -1
  138. package/dist/test/restoration-state-handler.test.js +14 -54
  139. package/dist/test/restoration-state-handler.test.js.map +1 -1
  140. package/dist/test/review-block.test.js +16 -18
  141. package/dist/test/review-block.test.js.map +1 -1
  142. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +2 -3
  143. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
  144. package/dist/test/sort-filter-bar/alpha-bar.test.js +18 -24
  145. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
  146. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +178 -180
  147. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  148. package/dist/test/text-overlay.test.js +16 -15
  149. package/dist/test/text-overlay.test.js.map +1 -1
  150. package/dist/test/text-snippet-block.test.js +14 -19
  151. package/dist/test/text-snippet-block.test.js.map +1 -1
  152. package/dist/test/tile-stats.test.js +73 -34
  153. package/dist/test/tile-stats.test.js.map +1 -1
  154. package/dist/test/tiles/grid/account-tile.test.js +25 -25
  155. package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
  156. package/dist/test/tiles/grid/collection-tile.test.js +13 -19
  157. package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
  158. package/dist/test/tiles/grid/item-tile.test.js +64 -91
  159. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  160. package/dist/test/tiles/grid/search-tile.test.js +9 -13
  161. package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
  162. package/dist/test/tiles/hover/hover-pane-controller.test.js +23 -35
  163. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  164. package/dist/test/tiles/hover/tile-hover-pane.test.js +12 -16
  165. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
  166. package/dist/test/tiles/list/tile-list-compact.test.js +34 -48
  167. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  168. package/dist/test/tiles/list/tile-list.test.js +76 -105
  169. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  170. package/dist/test/tiles/tile-dispatcher.test.js +17 -30
  171. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  172. package/dist/test/tiles/tile-mediatype-icon.test.js +12 -24
  173. package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -1
  174. package/eslint.config.mjs +53 -53
  175. package/index.html +24 -24
  176. package/local.archive.org.cert +86 -86
  177. package/local.archive.org.key +27 -27
  178. package/package.json +119 -118
  179. package/renovate.json +6 -6
  180. package/src/collection-browser.ts +3071 -2829
  181. package/src/collection-facets/facet-row.ts +299 -296
  182. package/src/collection-facets.ts +1010 -995
  183. package/src/data-source/collection-browser-data-source-interface.ts +345 -333
  184. package/src/data-source/collection-browser-data-source.ts +1441 -1401
  185. package/src/data-source/collection-browser-query-state.ts +59 -65
  186. package/src/data-source/models.ts +56 -43
  187. package/src/models.ts +864 -870
  188. package/src/restoration-state-handler.ts +546 -544
  189. package/test/collection-browser.test.ts +2413 -2403
  190. package/test/restoration-state-handler.test.ts +480 -510
  191. package/tsconfig.json +25 -20
  192. package/vite.config.ts +29 -22
  193. package/web-dev-server.config.mjs +30 -30
  194. package/web-test-runner.config.mjs +41 -41
@@ -37,7 +37,6 @@ testAudioModel.collectionFilesCount = 0;
37
37
  testAudioModel.collectionSize = 0;
38
38
  describe('ItemImage component', () => {
39
39
  it('should render initial component', async () => {
40
- var _a, _b;
41
40
  const el = await fixture(html `
42
41
  <item-image
43
42
  .isListTile=${false}
@@ -47,13 +46,12 @@ describe('ItemImage component', () => {
47
46
  >
48
47
  </item-image>
49
48
  `);
50
- const dropShadow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.drop-shadow');
51
- const imgClassName = (_b = dropShadow === null || dropShadow === void 0 ? void 0 : dropShadow.querySelector('img')) === null || _b === void 0 ? void 0 : _b.className;
49
+ const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');
50
+ const imgClassName = dropShadow?.querySelector('img')?.className;
52
51
  expect(dropShadow).to.exist;
53
52
  expect(imgClassName).to.eql(' contain ');
54
53
  });
55
54
  it('should render component if mediatype is waveform', async () => {
56
- var _a;
57
55
  const el = await fixture(html `
58
56
  <item-image
59
57
  .isListTile=${false}
@@ -63,18 +61,17 @@ describe('ItemImage component', () => {
63
61
  >
64
62
  </item-image>
65
63
  `);
66
- const dropShadow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.drop-shadow');
67
- const image = dropShadow === null || dropShadow === void 0 ? void 0 : dropShadow.querySelector('img');
64
+ const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');
65
+ const image = dropShadow?.querySelector('img');
68
66
  expect(dropShadow).to.exist;
69
67
  expect(image).to.exist;
70
68
  // simulate image onLoad event check if image className is waveform
71
69
  setTimeout(() => {
72
- const imgClassName = image === null || image === void 0 ? void 0 : image.className;
70
+ const imgClassName = image?.className;
73
71
  expect(imgClassName).to.eql(' waveform ');
74
72
  }, 1000);
75
73
  });
76
74
  it('should not fetch image with undefined base url', async () => {
77
- var _a;
78
75
  const el = await fixture(html `
79
76
  <item-image
80
77
  .isListTile=${false}
@@ -84,12 +81,11 @@ describe('ItemImage component', () => {
84
81
  </item-image>
85
82
  `);
86
83
  // Doesn't set the image src if base url is undefined
87
- const img = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('img');
84
+ const img = el.shadowRoot?.querySelector('img');
88
85
  expect(img).to.exist;
89
- expect(img === null || img === void 0 ? void 0 : img.getAttribute('src')).not.to.exist;
86
+ expect(img?.getAttribute('src')).not.to.exist;
90
87
  });
91
88
  it('should not fetch image with undefined model', async () => {
92
- var _a;
93
89
  const el = await fixture(html `
94
90
  <item-image
95
91
  .isListTile=${false}
@@ -99,12 +95,11 @@ describe('ItemImage component', () => {
99
95
  </item-image>
100
96
  `);
101
97
  // Doesn't set the image src if model is not present
102
- const img = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('img');
98
+ const img = el.shadowRoot?.querySelector('img');
103
99
  expect(img).to.exist;
104
- expect(img === null || img === void 0 ? void 0 : img.getAttribute('src')).not.to.exist;
100
+ expect(img?.getAttribute('src')).not.to.exist;
105
101
  });
106
102
  it('should not fetch image with undefined identifier', async () => {
107
- var _a;
108
103
  const el = await fixture(html `
109
104
  <item-image
110
105
  .isListTile=${false}
@@ -115,12 +110,11 @@ describe('ItemImage component', () => {
115
110
  </item-image>
116
111
  `);
117
112
  // Doesn't set the image src if identifier is not present
118
- const img = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('img');
113
+ const img = el.shadowRoot?.querySelector('img');
119
114
  expect(img).to.exist;
120
- expect(img === null || img === void 0 ? void 0 : img.getAttribute('src')).not.to.exist;
115
+ expect(img?.getAttribute('src')).not.to.exist;
121
116
  });
122
117
  it('should blur image if login required flag set', async () => {
123
- var _a, _b;
124
118
  const model = new TileModel({ identifier: 'foo' });
125
119
  model.loginRequired = true;
126
120
  const el = await fixture(html `
@@ -132,13 +126,12 @@ describe('ItemImage component', () => {
132
126
  >
133
127
  </item-image>
134
128
  `);
135
- const dropShadow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.drop-shadow');
129
+ const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');
136
130
  expect(dropShadow).to.exist;
137
- const imgClasses = (_b = dropShadow === null || dropShadow === void 0 ? void 0 : dropShadow.querySelector('img')) === null || _b === void 0 ? void 0 : _b.classList;
138
- expect(imgClasses === null || imgClasses === void 0 ? void 0 : imgClasses.contains('blur')).to.be.true;
131
+ const imgClasses = dropShadow?.querySelector('img')?.classList;
132
+ expect(imgClasses?.contains('blur')).to.be.true;
139
133
  });
140
134
  it('should blur image if content warning flag set', async () => {
141
- var _a, _b;
142
135
  const model = new TileModel({ identifier: 'foo' });
143
136
  model.contentWarning = true;
144
137
  const el = await fixture(html `
@@ -150,13 +143,12 @@ describe('ItemImage component', () => {
150
143
  >
151
144
  </item-image>
152
145
  `);
153
- const dropShadow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.drop-shadow');
146
+ const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');
154
147
  expect(dropShadow).to.exist;
155
- const imgClasses = (_b = dropShadow === null || dropShadow === void 0 ? void 0 : dropShadow.querySelector('img')) === null || _b === void 0 ? void 0 : _b.classList;
156
- expect(imgClasses === null || imgClasses === void 0 ? void 0 : imgClasses.contains('blur')).to.be.true;
148
+ const imgClasses = dropShadow?.querySelector('img')?.classList;
149
+ expect(imgClasses?.contains('blur')).to.be.true;
157
150
  });
158
151
  it('should not blur image if no login required nor content warning', async () => {
159
- var _a, _b;
160
152
  const model = new TileModel({ identifier: 'foo' });
161
153
  const el = await fixture(html `
162
154
  <item-image
@@ -167,13 +159,12 @@ describe('ItemImage component', () => {
167
159
  >
168
160
  </item-image>
169
161
  `);
170
- const dropShadow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.drop-shadow');
162
+ const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');
171
163
  expect(dropShadow).to.exist;
172
- const imgClasses = (_b = dropShadow === null || dropShadow === void 0 ? void 0 : dropShadow.querySelector('img')) === null || _b === void 0 ? void 0 : _b.classList;
173
- expect(imgClasses === null || imgClasses === void 0 ? void 0 : imgClasses.contains('blur')).to.be.false;
164
+ const imgClasses = dropShadow?.querySelector('img')?.classList;
165
+ expect(imgClasses?.contains('blur')).to.be.false;
174
166
  });
175
167
  it('should not blur image if blurring is suppressed, regardless of content flags', async () => {
176
- var _a, _b;
177
168
  const model = new TileModel({ identifier: 'foo' });
178
169
  model.loginRequired = true;
179
170
  model.contentWarning = true;
@@ -187,10 +178,10 @@ describe('ItemImage component', () => {
187
178
  >
188
179
  </item-image>
189
180
  `);
190
- const dropShadow = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.drop-shadow');
181
+ const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');
191
182
  expect(dropShadow).to.exist;
192
- const imgClasses = (_b = dropShadow === null || dropShadow === void 0 ? void 0 : dropShadow.querySelector('img')) === null || _b === void 0 ? void 0 : _b.classList;
193
- expect(imgClasses === null || imgClasses === void 0 ? void 0 : imgClasses.contains('blur')).to.be.false;
183
+ const imgClasses = dropShadow?.querySelector('img')?.classList;
184
+ expect(imgClasses?.contains('blur')).to.be.false;
194
185
  });
195
186
  });
196
187
  //# sourceMappingURL=item-image.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"item-image.test.js","sourceRoot":"","sources":["../../test/item-image.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\n\nimport { TileModel } from '../src/models';\nimport type { ItemImage } from '../src/tiles/item-image';\n\nimport '../src/tiles/item-image';\nimport { MediaType } from '@internetarchive/field-parsers';\n\nconst baseImageUrl = 'https://archive.org';\nconst testBookModel: TileModel = new TileModel({});\ntestBookModel.checked = false;\ntestBookModel.collections = [];\ntestBookModel.commentCount = 0;\ntestBookModel.creators = [];\ntestBookModel.favCount = 0;\ntestBookModel.identifier = '18730130BloomfieldRecordCompleteIssue';\ntestBookModel.itemCount = 0;\ntestBookModel.mediatype = 'texts';\ntestBookModel.subjects = [];\ntestBookModel.title = 'Sample Waveform';\ntestBookModel.viewCount = 0;\ntestBookModel.loginRequired = false;\ntestBookModel.contentWarning = false;\ntestBookModel.collectionFilesCount = 0;\ntestBookModel.collectionSize = 0;\n\nconst testAudioModel: TileModel = new TileModel({});\ntestAudioModel.checked = false;\ntestAudioModel.collections = [];\ntestAudioModel.commentCount = 0;\ntestAudioModel.creators = [];\ntestAudioModel.favCount = 0;\ntestAudioModel.identifier = 'dwd2015-01-24';\ntestAudioModel.itemCount = 0;\ntestAudioModel.mediatype = 'audio';\ntestAudioModel.subjects = [];\ntestAudioModel.title = 'Sample Waveform';\ntestAudioModel.viewCount = 0;\ntestAudioModel.loginRequired = false;\ntestAudioModel.contentWarning = false;\ntestAudioModel.collectionFilesCount = 0;\ntestAudioModel.collectionSize = 0;\n\ndescribe('ItemImage component', () => {\n it('should render initial component', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${testBookModel}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n const imgClassName = dropShadow?.querySelector('img')?.className;\n\n expect(dropShadow).to.exist;\n expect(imgClassName).to.eql(' contain ');\n });\n\n it('should render component if mediatype is waveform', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${testAudioModel}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n const image = dropShadow?.querySelector('img');\n expect(dropShadow).to.exist;\n expect(image).to.exist;\n\n // simulate image onLoad event check if image className is waveform\n setTimeout(() => {\n const imgClassName = image?.className;\n expect(imgClassName).to.eql(' waveform ');\n }, 1000);\n });\n\n it('should not fetch image with undefined base url', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${testBookModel}\n >\n </item-image>\n `);\n\n // Doesn't set the image src if base url is undefined\n const img = el.shadowRoot?.querySelector('img');\n expect(img).to.exist;\n expect(img?.getAttribute('src')).not.to.exist;\n });\n\n it('should not fetch image with undefined model', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n // Doesn't set the image src if model is not present\n const img = el.shadowRoot?.querySelector('img');\n expect(img).to.exist;\n expect(img?.getAttribute('src')).not.to.exist;\n });\n\n it('should not fetch image with undefined identifier', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${{}}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n // Doesn't set the image src if identifier is not present\n const img = el.shadowRoot?.querySelector('img');\n expect(img).to.exist;\n expect(img?.getAttribute('src')).not.to.exist;\n });\n\n it('should blur image if login required flag set', async () => {\n const model = new TileModel({ identifier: 'foo' });\n model.loginRequired = true;\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.true;\n });\n\n it('should blur image if content warning flag set', async () => {\n const model = new TileModel({ identifier: 'foo' });\n model.contentWarning = true;\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.true;\n });\n\n it('should not blur image if no login required nor content warning', async () => {\n const model = new TileModel({ identifier: 'foo' });\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.false;\n });\n\n it('should not blur image if blurring is suppressed, regardless of content flags', async () => {\n const model = new TileModel({ identifier: 'foo' });\n model.loginRequired = true;\n model.contentWarning = true;\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n suppressBlurring\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.false;\n });\n});\n"]}
1
+ {"version":3,"file":"item-image.test.js","sourceRoot":"","sources":["../../test/item-image.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\n\nimport { TileModel } from '../src/models';\nimport type { ItemImage } from '../src/tiles/item-image';\n\nimport '../src/tiles/item-image';\nimport { MediaType } from '@internetarchive/field-parsers';\n\nconst baseImageUrl = 'https://archive.org';\nconst testBookModel: TileModel = new TileModel({});\ntestBookModel.checked = false;\ntestBookModel.collections = [];\ntestBookModel.commentCount = 0;\ntestBookModel.creators = [];\ntestBookModel.favCount = 0;\ntestBookModel.identifier = '18730130BloomfieldRecordCompleteIssue';\ntestBookModel.itemCount = 0;\ntestBookModel.mediatype = 'texts';\ntestBookModel.subjects = [];\ntestBookModel.title = 'Sample Waveform';\ntestBookModel.viewCount = 0;\ntestBookModel.loginRequired = false;\ntestBookModel.contentWarning = false;\ntestBookModel.collectionFilesCount = 0;\ntestBookModel.collectionSize = 0;\n\nconst testAudioModel: TileModel = new TileModel({});\ntestAudioModel.checked = false;\ntestAudioModel.collections = [];\ntestAudioModel.commentCount = 0;\ntestAudioModel.creators = [];\ntestAudioModel.favCount = 0;\ntestAudioModel.identifier = 'dwd2015-01-24';\ntestAudioModel.itemCount = 0;\ntestAudioModel.mediatype = 'audio';\ntestAudioModel.subjects = [];\ntestAudioModel.title = 'Sample Waveform';\ntestAudioModel.viewCount = 0;\ntestAudioModel.loginRequired = false;\ntestAudioModel.contentWarning = false;\ntestAudioModel.collectionFilesCount = 0;\ntestAudioModel.collectionSize = 0;\n\ndescribe('ItemImage component', () => {\n it('should render initial component', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${testBookModel}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n const imgClassName = dropShadow?.querySelector('img')?.className;\n\n expect(dropShadow).to.exist;\n expect(imgClassName).to.eql(' contain ');\n });\n\n it('should render component if mediatype is waveform', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${testAudioModel}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n const image = dropShadow?.querySelector('img');\n expect(dropShadow).to.exist;\n expect(image).to.exist;\n\n // simulate image onLoad event check if image className is waveform\n setTimeout(() => {\n const imgClassName = image?.className;\n expect(imgClassName).to.eql(' waveform ');\n }, 1000);\n });\n\n it('should not fetch image with undefined base url', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${testBookModel}\n >\n </item-image>\n `);\n\n // Doesn't set the image src if base url is undefined\n const img = el.shadowRoot?.querySelector('img');\n expect(img).to.exist;\n expect(img?.getAttribute('src')).not.to.exist;\n });\n\n it('should not fetch image with undefined model', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n // Doesn't set the image src if model is not present\n const img = el.shadowRoot?.querySelector('img');\n expect(img).to.exist;\n expect(img?.getAttribute('src')).not.to.exist;\n });\n\n it('should not fetch image with undefined identifier', async () => {\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${{}}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n // Doesn't set the image src if identifier is not present\n const img = el.shadowRoot?.querySelector('img');\n expect(img).to.exist;\n expect(img?.getAttribute('src')).not.to.exist;\n });\n\n it('should blur image if login required flag set', async () => {\n const model = new TileModel({ identifier: 'foo' });\n model.loginRequired = true;\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.true;\n });\n\n it('should blur image if content warning flag set', async () => {\n const model = new TileModel({ identifier: 'foo' });\n model.contentWarning = true;\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.true;\n });\n\n it('should not blur image if no login required nor content warning', async () => {\n const model = new TileModel({ identifier: 'foo' });\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.false;\n });\n\n it('should not blur image if blurring is suppressed, regardless of content flags', async () => {\n const model = new TileModel({ identifier: 'foo' });\n model.loginRequired = true;\n model.contentWarning = true;\n\n const el = await fixture<ItemImage>(html`\n <item-image\n .isListTile=${false}\n .isCompactTile=${false}\n .model=${model}\n .baseImageUrl=${baseImageUrl}\n suppressBlurring\n >\n </item-image>\n `);\n\n const dropShadow = el.shadowRoot?.querySelector('.drop-shadow');\n expect(dropShadow).to.exist;\n\n const imgClasses = dropShadow?.querySelector('img')?.classList;\n expect(imgClasses?.contains('blur')).to.be.false;\n });\n});\n"]}
@@ -6,82 +6,70 @@ import '@internetarchive/modal-manager';
6
6
  import { msg } from '@lit/localize';
7
7
  describe('Manage bar', () => {
8
8
  it('renders basic component', async () => {
9
- var _a, _b, _c, _d;
10
9
  const el = await fixture(html `<manage-bar></manage-bar>`);
11
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.manage-label')).to.exist;
12
- expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.manage-buttons')).to.exist;
13
- expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.ia-button.dark')).to.exist;
14
- expect((_d = el.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('.ia-button.danger')).to.exist;
10
+ expect(el.shadowRoot?.querySelector('.manage-label')).to.exist;
11
+ expect(el.shadowRoot?.querySelector('.manage-buttons')).to.exist;
12
+ expect(el.shadowRoot?.querySelector('.ia-button.dark')).to.exist;
13
+ expect(el.shadowRoot?.querySelector('.ia-button.danger')).to.exist;
15
14
  });
16
15
  it('can set the label', async () => {
17
- var _a, _b;
18
16
  const el = await fixture(html `<manage-bar label="foo bar"></manage-bar>`);
19
- expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.manage-label')) === null || _b === void 0 ? void 0 : _b.textContent).to.equal('foo bar');
17
+ expect(el.shadowRoot?.querySelector('.manage-label')?.textContent).to.equal('foo bar');
20
18
  });
21
19
  it('does not include Select All/Unselect All buttons by default', async () => {
22
- var _a, _b;
23
20
  const el = await fixture(html `<manage-bar></manage-bar>`);
24
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-all-btn')).not.to.exist;
25
- expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.unselect-all-btn')).not.to.exist;
21
+ expect(el.shadowRoot?.querySelector('.select-all-btn')).not.to.exist;
22
+ expect(el.shadowRoot?.querySelector('.unselect-all-btn')).not.to.exist;
26
23
  });
27
24
  it('does not render item manager button except /search/ page', async () => {
28
- var _a;
29
25
  const el = await fixture(html `<manage-bar></manage-bar>`);
30
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.ia-button.warning')).not.to.exist;
26
+ expect(el.shadowRoot?.querySelector('.ia-button.warning')).not.to.exist;
31
27
  });
32
28
  it('render item manager button for /search/ page', async () => {
33
- var _a;
34
29
  const el = await fixture(html `<manage-bar showItemManageButton></manage-bar>`);
35
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.ia-button.warning')).to.exist;
30
+ expect(el.shadowRoot?.querySelector('.ia-button.warning')).to.exist;
36
31
  });
37
32
  it('includes Select All button when requested', async () => {
38
- var _a;
39
33
  const el = await fixture(html `<manage-bar showSelectAll></manage-bar>`);
40
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-all-btn')).to.exist;
34
+ expect(el.shadowRoot?.querySelector('.select-all-btn')).to.exist;
41
35
  });
42
36
  it('includes Unselect All button when requested', async () => {
43
- var _a;
44
37
  const el = await fixture(html `<manage-bar showUnselectAll></manage-bar>`);
45
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.unselect-all-btn')).to.exist;
38
+ expect(el.shadowRoot?.querySelector('.unselect-all-btn')).to.exist;
46
39
  });
47
40
  it('default and toggle state of remove button', async () => {
48
- var _a, _b;
49
41
  const el = await fixture(html `<manage-bar></manage-bar>`);
50
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.ia-button.danger:disabled')).to.exist;
42
+ expect(el.shadowRoot?.querySelector('.ia-button.danger:disabled')).to.exist;
51
43
  el.removeAllowed = true;
52
44
  await el.updateComplete;
53
- expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.ia-button.danger:disabled')).to.not
45
+ expect(el.shadowRoot?.querySelector('.ia-button.danger:disabled')).to.not
54
46
  .exist;
55
47
  });
56
48
  it('emits event when Cancel button clicked', async () => {
57
- var _a;
58
49
  const spy = Sinon.spy();
59
50
  const el = await fixture(html `<manage-bar @cancel=${spy}></manage-bar>`);
60
- const cancelBtn = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.ia-button.dark');
51
+ const cancelBtn = el.shadowRoot?.querySelector('.ia-button.dark');
61
52
  expect(cancelBtn).to.exist;
62
53
  cancelBtn.click();
63
54
  expect(spy.callCount).to.equal(1);
64
55
  });
65
56
  it('emits event when Select All button clicked', async () => {
66
- var _a;
67
57
  const spy = Sinon.spy();
68
58
  const el = await fixture(html `<manage-bar showSelectAll @selectAll=${spy}></manage-bar>`);
69
- const selectAllBtn = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.select-all-btn');
59
+ const selectAllBtn = el.shadowRoot?.querySelector('.select-all-btn');
70
60
  expect(selectAllBtn).to.exist;
71
61
  selectAllBtn.click();
72
62
  expect(spy.callCount).to.equal(1);
73
63
  });
74
64
  it('emits event when Unselect All button clicked', async () => {
75
- var _a;
76
65
  const spy = Sinon.spy();
77
66
  const el = await fixture(html `<manage-bar showUnselectAll @unselectAll=${spy}></manage-bar>`);
78
- const unselectAllBtn = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.unselect-all-btn');
67
+ const unselectAllBtn = el.shadowRoot?.querySelector('.unselect-all-btn');
79
68
  expect(unselectAllBtn).to.exist;
80
69
  unselectAllBtn.click();
81
70
  expect(spy.callCount).to.equal(1);
82
71
  });
83
72
  it('opens the remove items modal when showRemoveItemsModal is clicked', async () => {
84
- var _a, _b, _c, _d;
85
73
  const modalManager = await fixture(html `<modal-manager></modal-manager>`);
86
74
  const el = await fixture(html `
87
75
  <manage-bar
@@ -91,15 +79,15 @@ describe('Manage bar', () => {
91
79
  ></manage-bar>
92
80
  `);
93
81
  await el.updateComplete;
94
- const removeButton = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.ia-button.danger');
82
+ const removeButton = el.shadowRoot?.querySelector('.ia-button.danger');
95
83
  expect(removeButton).to.exist;
96
84
  const showModalSpy = Sinon.spy(el.modalManager, 'showModal');
97
85
  await el.updateComplete;
98
- removeButton === null || removeButton === void 0 ? void 0 : removeButton.click();
99
- console.log((_b = showModalSpy.args[0][0].config.title) === null || _b === void 0 ? void 0 : _b.values[0]);
86
+ removeButton?.click();
87
+ console.log(showModalSpy.args[0][0].config.title?.values[0]);
100
88
  expect(showModalSpy.callCount).to.equal(1);
101
- expect((_c = el.modalManager) === null || _c === void 0 ? void 0 : _c.classList.contains('remove-items')).to.be;
102
- expect((_d = showModalSpy.args[0][0].config.title) === null || _d === void 0 ? void 0 : _d.values[0]).to.equal(msg('Are you sure you want to remove these items?'));
89
+ expect(el.modalManager?.classList.contains('remove-items')).to.be;
90
+ expect(showModalSpy.args[0][0].config.title?.values[0]).to.equal(msg('Are you sure you want to remove these items?'));
103
91
  expect(showModalSpy.args[0][0].customModalContent).to.exist;
104
92
  });
105
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"manage-bar.test.js","sourceRoot":"","sources":["../../../test/manage/manage-bar.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport Sinon from 'sinon';\nimport '../../src/manage/manage-bar';\nimport {\n ModalManager,\n ModalManagerInterface,\n} from '@internetarchive/modal-manager';\nimport '@internetarchive/modal-manager';\nimport { msg } from '@lit/localize';\nimport type { ManageBar } from '../../src/manage/manage-bar';\n\ndescribe('Manage bar', () => {\n it('renders basic component', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n\n expect(el.shadowRoot?.querySelector('.manage-label')).to.exist;\n expect(el.shadowRoot?.querySelector('.manage-buttons')).to.exist;\n expect(el.shadowRoot?.querySelector('.ia-button.dark')).to.exist;\n expect(el.shadowRoot?.querySelector('.ia-button.danger')).to.exist;\n });\n\n it('can set the label', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar label=\"foo bar\"></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.manage-label')?.textContent).to.equal(\n 'foo bar',\n );\n });\n\n it('does not include Select All/Unselect All buttons by default', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n expect(el.shadowRoot?.querySelector('.select-all-btn')).not.to.exist;\n expect(el.shadowRoot?.querySelector('.unselect-all-btn')).not.to.exist;\n });\n\n it('does not render item manager button except /search/ page', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n expect(el.shadowRoot?.querySelector('.ia-button.warning')).not.to.exist;\n });\n\n it('render item manager button for /search/ page', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar showItemManageButton></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.ia-button.warning')).to.exist;\n });\n\n it('includes Select All button when requested', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar showSelectAll></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.select-all-btn')).to.exist;\n });\n\n it('includes Unselect All button when requested', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar showUnselectAll></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.unselect-all-btn')).to.exist;\n });\n\n it('default and toggle state of remove button', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n\n expect(el.shadowRoot?.querySelector('.ia-button.danger:disabled')).to.exist;\n\n el.removeAllowed = true;\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.ia-button.danger:disabled')).to.not\n .exist;\n });\n\n it('emits event when Cancel button clicked', async () => {\n const spy = Sinon.spy();\n const el = await fixture<ManageBar>(\n html`<manage-bar @cancel=${spy}></manage-bar>`,\n );\n\n const cancelBtn = el.shadowRoot?.querySelector(\n '.ia-button.dark',\n ) as HTMLButtonElement;\n expect(cancelBtn).to.exist;\n\n cancelBtn.click();\n expect(spy.callCount).to.equal(1);\n });\n\n it('emits event when Select All button clicked', async () => {\n const spy = Sinon.spy();\n const el = await fixture<ManageBar>(\n html`<manage-bar showSelectAll @selectAll=${spy}></manage-bar>`,\n );\n\n const selectAllBtn = el.shadowRoot?.querySelector(\n '.select-all-btn',\n ) as HTMLButtonElement;\n expect(selectAllBtn).to.exist;\n\n selectAllBtn.click();\n expect(spy.callCount).to.equal(1);\n });\n\n it('emits event when Unselect All button clicked', async () => {\n const spy = Sinon.spy();\n const el = await fixture<ManageBar>(\n html`<manage-bar showUnselectAll @unselectAll=${spy}></manage-bar>`,\n );\n\n const unselectAllBtn = el.shadowRoot?.querySelector(\n '.unselect-all-btn',\n ) as HTMLButtonElement;\n expect(unselectAllBtn).to.exist;\n\n unselectAllBtn.click();\n expect(spy.callCount).to.equal(1);\n });\n\n it('opens the remove items modal when showRemoveItemsModal is clicked', async () => {\n const modalManager = await fixture<ModalManager>(\n html`<modal-manager></modal-manager>`,\n );\n\n const el = await fixture<ManageBar>(html`\n <manage-bar\n .modalManager=${modalManager}\n .selectedItems=${[{ identifier: '1', title: 'Item 1' }]}\n removeAllowed\n ></manage-bar>\n `);\n await el.updateComplete;\n\n const removeButton = el.shadowRoot?.querySelector(\n '.ia-button.danger',\n ) as HTMLButtonElement;\n expect(removeButton).to.exist;\n\n const showModalSpy = Sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal',\n );\n\n await el.updateComplete;\n removeButton?.click();\n\n console.log(showModalSpy.args[0][0].config.title?.values[0]);\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('remove-items')).to.be;\n expect(showModalSpy.args[0][0].config.title?.values[0]).to.equal(\n msg('Are you sure you want to remove these items?'),\n );\n expect(showModalSpy.args[0][0].customModalContent).to.exist;\n });\n});\n"]}
1
+ {"version":3,"file":"manage-bar.test.js","sourceRoot":"","sources":["../../../test/manage/manage-bar.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,6BAA6B,CAAC;AAKrC,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGpC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,2BAA2B,CAAC,CAAC;QAErE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,2CAA2C,CAChD,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CACzE,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,gDAAgD,CACrD,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,yCAAyC,CAC9C,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,2CAA2C,CAChD,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,2BAA2B,CAAC,CAAC;QAErE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAE5E,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG;aACtE,KAAK,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,uBAAuB,GAAG,gBAAgB,CAC/C,CAAC;QAEF,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,aAAa,CAC5C,iBAAiB,CACG,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAE3B,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,wCAAwC,GAAG,gBAAgB,CAChE,CAAC;QAEF,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,aAAa,CAC/C,iBAAiB,CACG,CAAC;QACvB,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAE9B,YAAY,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,4CAA4C,GAAG,gBAAgB,CACpE,CAAC;QAEF,MAAM,cAAc,GAAG,EAAE,CAAC,UAAU,EAAE,aAAa,CACjD,mBAAmB,CACC,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAEhC,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,IAAI,CAAA,iCAAiC,CACtC,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA;;wBAEpB,YAAY;yBACX,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;;;KAG1D,CAAC,CAAC;QACH,MAAM,EAAE,CAAC,cAAc,CAAC;QAExB,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,EAAE,aAAa,CAC/C,mBAAmB,CACC,CAAC;QACvB,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAE9B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAC5B,EAAE,CAAC,YAAqC,EACxC,WAAW,CACZ,CAAC;QAEF,MAAM,EAAE,CAAC,cAAc,CAAC;QACxB,YAAY,EAAE,KAAK,EAAE,CAAC;QAEtB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7D,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC9D,GAAG,CAAC,8CAA8C,CAAC,CACpD,CAAC;QACF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport Sinon from 'sinon';\nimport '../../src/manage/manage-bar';\nimport {\n ModalManager,\n ModalManagerInterface,\n} from '@internetarchive/modal-manager';\nimport '@internetarchive/modal-manager';\nimport { msg } from '@lit/localize';\nimport type { ManageBar } from '../../src/manage/manage-bar';\n\ndescribe('Manage bar', () => {\n it('renders basic component', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n\n expect(el.shadowRoot?.querySelector('.manage-label')).to.exist;\n expect(el.shadowRoot?.querySelector('.manage-buttons')).to.exist;\n expect(el.shadowRoot?.querySelector('.ia-button.dark')).to.exist;\n expect(el.shadowRoot?.querySelector('.ia-button.danger')).to.exist;\n });\n\n it('can set the label', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar label=\"foo bar\"></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.manage-label')?.textContent).to.equal(\n 'foo bar',\n );\n });\n\n it('does not include Select All/Unselect All buttons by default', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n expect(el.shadowRoot?.querySelector('.select-all-btn')).not.to.exist;\n expect(el.shadowRoot?.querySelector('.unselect-all-btn')).not.to.exist;\n });\n\n it('does not render item manager button except /search/ page', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n expect(el.shadowRoot?.querySelector('.ia-button.warning')).not.to.exist;\n });\n\n it('render item manager button for /search/ page', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar showItemManageButton></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.ia-button.warning')).to.exist;\n });\n\n it('includes Select All button when requested', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar showSelectAll></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.select-all-btn')).to.exist;\n });\n\n it('includes Unselect All button when requested', async () => {\n const el = await fixture<ManageBar>(\n html`<manage-bar showUnselectAll></manage-bar>`,\n );\n expect(el.shadowRoot?.querySelector('.unselect-all-btn')).to.exist;\n });\n\n it('default and toggle state of remove button', async () => {\n const el = await fixture<ManageBar>(html`<manage-bar></manage-bar>`);\n\n expect(el.shadowRoot?.querySelector('.ia-button.danger:disabled')).to.exist;\n\n el.removeAllowed = true;\n await el.updateComplete;\n\n expect(el.shadowRoot?.querySelector('.ia-button.danger:disabled')).to.not\n .exist;\n });\n\n it('emits event when Cancel button clicked', async () => {\n const spy = Sinon.spy();\n const el = await fixture<ManageBar>(\n html`<manage-bar @cancel=${spy}></manage-bar>`,\n );\n\n const cancelBtn = el.shadowRoot?.querySelector(\n '.ia-button.dark',\n ) as HTMLButtonElement;\n expect(cancelBtn).to.exist;\n\n cancelBtn.click();\n expect(spy.callCount).to.equal(1);\n });\n\n it('emits event when Select All button clicked', async () => {\n const spy = Sinon.spy();\n const el = await fixture<ManageBar>(\n html`<manage-bar showSelectAll @selectAll=${spy}></manage-bar>`,\n );\n\n const selectAllBtn = el.shadowRoot?.querySelector(\n '.select-all-btn',\n ) as HTMLButtonElement;\n expect(selectAllBtn).to.exist;\n\n selectAllBtn.click();\n expect(spy.callCount).to.equal(1);\n });\n\n it('emits event when Unselect All button clicked', async () => {\n const spy = Sinon.spy();\n const el = await fixture<ManageBar>(\n html`<manage-bar showUnselectAll @unselectAll=${spy}></manage-bar>`,\n );\n\n const unselectAllBtn = el.shadowRoot?.querySelector(\n '.unselect-all-btn',\n ) as HTMLButtonElement;\n expect(unselectAllBtn).to.exist;\n\n unselectAllBtn.click();\n expect(spy.callCount).to.equal(1);\n });\n\n it('opens the remove items modal when showRemoveItemsModal is clicked', async () => {\n const modalManager = await fixture<ModalManager>(\n html`<modal-manager></modal-manager>`,\n );\n\n const el = await fixture<ManageBar>(html`\n <manage-bar\n .modalManager=${modalManager}\n .selectedItems=${[{ identifier: '1', title: 'Item 1' }]}\n removeAllowed\n ></manage-bar>\n `);\n await el.updateComplete;\n\n const removeButton = el.shadowRoot?.querySelector(\n '.ia-button.danger',\n ) as HTMLButtonElement;\n expect(removeButton).to.exist;\n\n const showModalSpy = Sinon.spy(\n el.modalManager as ModalManagerInterface,\n 'showModal',\n );\n\n await el.updateComplete;\n removeButton?.click();\n\n console.log(showModalSpy.args[0][0].config.title?.values[0]);\n\n expect(showModalSpy.callCount).to.equal(1);\n expect(el.modalManager?.classList.contains('remove-items')).to.be;\n expect(showModalSpy.args[0][0].config.title?.values[0]).to.equal(\n msg('Are you sure you want to remove these items?'),\n );\n expect(showModalSpy.args[0][0].customModalContent).to.exist;\n });\n});\n"]}
@@ -8,35 +8,31 @@ describe('RemoveItemsModalContent', () => {
8
8
  { identifier: '2', title: 'Item 2', date: '2022-01-02' },
9
9
  ];
10
10
  it('renders basic component', async () => {
11
- var _a, _b, _c;
12
11
  const el = await fixture(html `
13
12
  <remove-items-modal-content
14
13
  .items=${items}
15
14
  .message=${''}
16
15
  ></remove-items-modal-content>
17
16
  `);
18
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('ul')).to.exist;
19
- expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.button-bar')).to.exist;
20
- expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.remove-items-btn')).to.exist;
17
+ expect(el.shadowRoot?.querySelector('ul')).to.exist;
18
+ expect(el.shadowRoot?.querySelector('.button-bar')).to.exist;
19
+ expect(el.shadowRoot?.querySelector('.remove-items-btn')).to.exist;
21
20
  });
22
21
  it('renders list of items', async () => {
23
- var _a;
24
22
  const el = await fixture(html `
25
23
  <remove-items-modal-content
26
24
  .items=${items}
27
25
  .message=${''}
28
26
  ></remove-items-modal-content>
29
27
  `);
30
- const listItems = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelectorAll('li');
28
+ const listItems = el.shadowRoot?.querySelectorAll('li');
31
29
  expect(listItems).to.have.lengthOf(2);
32
- listItems === null || listItems === void 0 ? void 0 : listItems.forEach((item, index) => {
33
- var _a, _b;
34
- expect((_a = item.querySelector('.item-title')) === null || _a === void 0 ? void 0 : _a.textContent).to.equal(items[index].title);
35
- expect((_b = item.querySelector('.item-date')) === null || _b === void 0 ? void 0 : _b.textContent).to.equal(items[index].date);
30
+ listItems?.forEach((item, index) => {
31
+ expect(item.querySelector('.item-title')?.textContent).to.equal(items[index].title);
32
+ expect(item.querySelector('.item-date')?.textContent).to.equal(items[index].date);
36
33
  });
37
34
  });
38
35
  it('renders message', async () => {
39
- var _a, _b;
40
36
  const message = 'This is a test message';
41
37
  const el = await fixture(html `
42
38
  <remove-items-modal-content
@@ -44,10 +40,9 @@ describe('RemoveItemsModalContent', () => {
44
40
  .message=${message}
45
41
  ></remove-items-modal-content>
46
42
  `);
47
- expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.message')) === null || _b === void 0 ? void 0 : _b.textContent).to.equal(message);
43
+ expect(el.shadowRoot?.querySelector('.message')?.textContent).to.equal(message);
48
44
  });
49
45
  it('dispatches confirm event when remove items button is clicked', async () => {
50
- var _a;
51
46
  const el = await fixture(html `
52
47
  <remove-items-modal-content
53
48
  .items=${items}
@@ -56,8 +51,8 @@ describe('RemoveItemsModalContent', () => {
56
51
  `);
57
52
  const spy = Sinon.spy();
58
53
  el.addEventListener('confirm', spy);
59
- const button = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.remove-items-btn');
60
- button === null || button === void 0 ? void 0 : button.click();
54
+ const button = el.shadowRoot?.querySelector('.remove-items-btn');
55
+ button?.click();
61
56
  expect(spy.calledOnce).to.be.true;
62
57
  expect(spy.args[0][0].detail.items).to.deep.equal(items);
63
58
  });
@@ -1 +1 @@
1
- {"version":3,"file":"remove-items-modal-content.test.js","sourceRoot":"","sources":["../../../test/manage/remove-items-modal-content.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport Sinon from 'sinon';\nimport type { ManageableItem } from '../../src/models';\nimport type { RemoveItemsModalContent } from '../../src/manage/remove-items-modal-content';\nimport '../../src/manage/remove-items-modal-content';\n\ndescribe('RemoveItemsModalContent', () => {\n const items: ManageableItem[] = [\n { identifier: '1', title: 'Item 1', date: '2022-01-01' },\n { identifier: '2', title: 'Item 2', date: '2022-01-02' },\n ];\n\n it('renders basic component', async () => {\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${items}\n .message=${''}\n ></remove-items-modal-content>\n `);\n\n expect(el.shadowRoot?.querySelector('ul')).to.exist;\n expect(el.shadowRoot?.querySelector('.button-bar')).to.exist;\n expect(el.shadowRoot?.querySelector('.remove-items-btn')).to.exist;\n });\n\n it('renders list of items', async () => {\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${items}\n .message=${''}\n ></remove-items-modal-content>\n `);\n\n const listItems = el.shadowRoot?.querySelectorAll('li');\n expect(listItems).to.have.lengthOf(2);\n\n listItems?.forEach((item, index) => {\n expect(item.querySelector('.item-title')?.textContent).to.equal(\n items[index].title,\n );\n expect(item.querySelector('.item-date')?.textContent).to.equal(\n items[index].date,\n );\n });\n });\n\n it('renders message', async () => {\n const message = 'This is a test message';\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${[]}\n .message=${message}\n ></remove-items-modal-content>\n `);\n\n expect(el.shadowRoot?.querySelector('.message')?.textContent).to.equal(\n message,\n );\n });\n\n it('dispatches confirm event when remove items button is clicked', async () => {\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${items}\n .message=${''}\n ></remove-items-modal-content>\n `);\n\n const spy = Sinon.spy();\n el.addEventListener('confirm', spy);\n\n const button = el.shadowRoot?.querySelector(\n '.remove-items-btn',\n ) as HTMLInputElement;\n button?.click();\n\n expect(spy.calledOnce).to.be.true;\n expect(spy.args[0][0].detail.items).to.deep.equal(items);\n });\n});\n"]}
1
+ {"version":3,"file":"remove-items-modal-content.test.js","sourceRoot":"","sources":["../../../test/manage/remove-items-modal-content.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,6CAA6C,CAAC;AAErD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,KAAK,GAAqB;QAC9B,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;QACxD,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE;KACzD,CAAC;IAEF,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,OAAO,CAA0B,IAAI,CAAA;;iBAEzC,KAAK;mBACH,EAAE;;KAEhB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7D,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,EAAE,GAAG,MAAM,OAAO,CAA0B,IAAI,CAAA;;iBAEzC,KAAK;mBACH,EAAE;;KAEhB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAC7D,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CACnB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5D,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAClB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,wBAAwB,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,OAAO,CAA0B,IAAI,CAAA;;iBAEzC,EAAE;mBACA,OAAO;;KAErB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CACpE,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,GAAG,MAAM,OAAO,CAA0B,IAAI,CAAA;;iBAEzC,KAAK;mBACH,EAAE;;KAEhB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACxB,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,EAAE,aAAa,CACzC,mBAAmB,CACA,CAAC;QACtB,MAAM,EAAE,KAAK,EAAE,CAAC;QAEhB,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport Sinon from 'sinon';\nimport type { ManageableItem } from '../../src/models';\nimport type { RemoveItemsModalContent } from '../../src/manage/remove-items-modal-content';\nimport '../../src/manage/remove-items-modal-content';\n\ndescribe('RemoveItemsModalContent', () => {\n const items: ManageableItem[] = [\n { identifier: '1', title: 'Item 1', date: '2022-01-01' },\n { identifier: '2', title: 'Item 2', date: '2022-01-02' },\n ];\n\n it('renders basic component', async () => {\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${items}\n .message=${''}\n ></remove-items-modal-content>\n `);\n\n expect(el.shadowRoot?.querySelector('ul')).to.exist;\n expect(el.shadowRoot?.querySelector('.button-bar')).to.exist;\n expect(el.shadowRoot?.querySelector('.remove-items-btn')).to.exist;\n });\n\n it('renders list of items', async () => {\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${items}\n .message=${''}\n ></remove-items-modal-content>\n `);\n\n const listItems = el.shadowRoot?.querySelectorAll('li');\n expect(listItems).to.have.lengthOf(2);\n\n listItems?.forEach((item, index) => {\n expect(item.querySelector('.item-title')?.textContent).to.equal(\n items[index].title,\n );\n expect(item.querySelector('.item-date')?.textContent).to.equal(\n items[index].date,\n );\n });\n });\n\n it('renders message', async () => {\n const message = 'This is a test message';\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${[]}\n .message=${message}\n ></remove-items-modal-content>\n `);\n\n expect(el.shadowRoot?.querySelector('.message')?.textContent).to.equal(\n message,\n );\n });\n\n it('dispatches confirm event when remove items button is clicked', async () => {\n const el = await fixture<RemoveItemsModalContent>(html`\n <remove-items-modal-content\n .items=${items}\n .message=${''}\n ></remove-items-modal-content>\n `);\n\n const spy = Sinon.spy();\n el.addEventListener('confirm', spy);\n\n const button = el.shadowRoot?.querySelector(\n '.remove-items-btn',\n ) as HTMLInputElement;\n button?.click();\n\n expect(spy.calledOnce).to.be.true;\n expect(spy.args[0][0].detail.items).to.deep.equal(items);\n });\n});\n"]}
@@ -35,7 +35,6 @@ export class MockSearchService {
35
35
  this.resultsSpy = resultsSpy;
36
36
  }
37
37
  async search(params, searchType) {
38
- var _a, _b;
39
38
  this.searchParams = params;
40
39
  this.searchType = searchType;
41
40
  if (this.asyncResponse) {
@@ -44,8 +43,8 @@ export class MockSearchService {
44
43
  setTimeout(res, this.asyncResponseDelay);
45
44
  });
46
45
  }
47
- const responseKey = (_a = (this.searchParams.query || this.searchParams.pageTarget)) !== null && _a !== void 0 ? _a : '';
48
- const resultFn = (_b = responses[responseKey]) !== null && _b !== void 0 ? _b : getMockSuccessMultipleResults;
46
+ const responseKey = (this.searchParams.query || this.searchParams.pageTarget) ?? '';
47
+ const resultFn = responses[responseKey] ?? getMockSuccessMultipleResults;
49
48
  let result = resultFn();
50
49
  // with-sort query has special handling
51
50
  if (this.searchParams.query === 'with-sort') {
@@ -1 +1 @@
1
- {"version":3,"file":"mock-search-service.js","sourceRoot":"","sources":["../../../test/mocks/mock-search-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Result } from '@internetarchive/result-type';\nimport type {\n SearchParams,\n SearchResponse,\n SearchServiceInterface,\n SearchServiceError,\n SearchType,\n} from '@internetarchive/search-service';\nimport {\n getMockSuccessSingleResult,\n getMockSuccessMultipleResults,\n getMockSuccessSingleResultWithSort,\n getMockSuccessLoggedInResult,\n getMockSuccessNoPreviewResult,\n getMockSuccessLoggedInAndNoPreviewResult,\n getMockSuccessWithYearHistogramAggs,\n getMockSuccessWithDateHistogramAggs,\n getMockSuccessMultiLineDescription,\n getMockSuccessFirstTitleResult,\n getMockSuccessFirstCreatorResult,\n getMockErrorResult,\n getMockMalformedResult,\n getMockSuccessWithCollectionTitles,\n getMockSuccessWithChannelAliases,\n getMockSuccessWithCollectionAggregations,\n getMockSuccessExtraQuotedHref,\n getMockSuccessWithDefaultSort,\n getMockSuccessWithConciseDefaultSort,\n getMockSuccessWithDefaultFavSort,\n getMockSuccessWithParentCollections,\n getMockSuccessForTvCollection,\n getMockSuccessManyFields,\n getMockSuccessNoResults,\n getMockSuccessWithWebArchiveHits,\n getMockSuccessWithManyAggregations,\n getMockSuccessTvFields,\n getMockSuccessArchiveOrgUserResult,\n getMockSuccessArchiveOrgUserNoBlurResult,\n} from './mock-search-responses';\n\nconst responses: Record<\n string,\n () => Result<SearchResponse, SearchServiceError>\n> = {\n 'single-result': getMockSuccessSingleResult,\n years: getMockSuccessWithYearHistogramAggs,\n months: getMockSuccessWithDateHistogramAggs,\n 'multi-line-description': getMockSuccessMultiLineDescription,\n loggedin: getMockSuccessLoggedInResult,\n 'no-preview': getMockSuccessNoPreviewResult,\n 'loggedin-no-preview': getMockSuccessLoggedInAndNoPreviewResult,\n 'archive-org-user-loggedin': getMockSuccessArchiveOrgUserResult,\n 'archive-org-user-loggedin-noblur': getMockSuccessArchiveOrgUserNoBlurResult,\n 'first-title': getMockSuccessFirstTitleResult,\n 'first-creator': getMockSuccessFirstCreatorResult,\n 'collection-titles': getMockSuccessWithCollectionTitles,\n 'channel-aliases': getMockSuccessWithChannelAliases,\n 'collection-aggregations': getMockSuccessWithCollectionAggregations,\n 'extra-quoted-href': getMockSuccessExtraQuotedHref,\n 'default-sort': getMockSuccessWithDefaultSort,\n 'default-sort-concise': getMockSuccessWithConciseDefaultSort,\n 'fav-sort': getMockSuccessWithDefaultFavSort,\n 'parent-collections': getMockSuccessWithParentCollections,\n 'tv-collection': getMockSuccessForTvCollection,\n 'web-archive': getMockSuccessWithWebArchiveHits,\n 'more-facets': getMockSuccessWithManyAggregations,\n 'many-fields': getMockSuccessManyFields,\n 'tv-fields': getMockSuccessTvFields,\n 'no-results': getMockSuccessNoResults,\n error: getMockErrorResult,\n malformed: getMockMalformedResult,\n};\n\nexport class MockSearchService implements SearchServiceInterface {\n searchParams?: SearchParams;\n\n searchType?: SearchType;\n\n asyncResponse: boolean;\n\n asyncResponseDelay: number;\n\n resultsSpy: Function;\n\n constructor({\n asyncResponse = false,\n asyncResponseDelay = 0,\n resultsSpy = () => {},\n } = {}) {\n this.asyncResponse = asyncResponse;\n this.asyncResponseDelay = asyncResponseDelay;\n this.resultsSpy = resultsSpy;\n }\n\n async search(\n params: SearchParams,\n searchType: SearchType,\n ): Promise<Result<SearchResponse, SearchServiceError>> {\n this.searchParams = params;\n this.searchType = searchType;\n\n if (this.asyncResponse) {\n // Add an artificial 1-tick delay\n await new Promise(res => {\n setTimeout(res, this.asyncResponseDelay);\n });\n }\n\n const responseKey =\n (this.searchParams.query || this.searchParams.pageTarget) ?? '';\n const resultFn: () => Result<SearchResponse, SearchServiceError> =\n responses[responseKey] ?? getMockSuccessMultipleResults;\n let result = resultFn();\n\n // with-sort query has special handling\n if (this.searchParams.query === 'with-sort') {\n result = getMockSuccessSingleResultWithSort(this.resultsSpy);\n }\n\n // Apply any uid param from the request\n if (result.success) {\n (result.success.request.clientParameters as any).uid = params.uid;\n }\n\n return result;\n }\n\n async itemDetails(\n _: string,\n ): Promise<Result<SearchResponse, SearchServiceError>> {\n // We don't currently use the itemDetails method in collection-browser\n throw new Error('not implemented');\n }\n}\n"]}
1
+ {"version":3,"file":"mock-search-service.js","sourceRoot":"","sources":["../../../test/mocks/mock-search-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Result } from '@internetarchive/result-type';\nimport type {\n SearchParams,\n SearchResponse,\n SearchServiceInterface,\n SearchServiceError,\n SearchType,\n} from '@internetarchive/search-service';\nimport {\n getMockSuccessSingleResult,\n getMockSuccessMultipleResults,\n getMockSuccessSingleResultWithSort,\n getMockSuccessLoggedInResult,\n getMockSuccessNoPreviewResult,\n getMockSuccessLoggedInAndNoPreviewResult,\n getMockSuccessWithYearHistogramAggs,\n getMockSuccessWithDateHistogramAggs,\n getMockSuccessMultiLineDescription,\n getMockSuccessFirstTitleResult,\n getMockSuccessFirstCreatorResult,\n getMockErrorResult,\n getMockMalformedResult,\n getMockSuccessWithCollectionTitles,\n getMockSuccessWithChannelAliases,\n getMockSuccessWithCollectionAggregations,\n getMockSuccessExtraQuotedHref,\n getMockSuccessWithDefaultSort,\n getMockSuccessWithConciseDefaultSort,\n getMockSuccessWithDefaultFavSort,\n getMockSuccessWithParentCollections,\n getMockSuccessForTvCollection,\n getMockSuccessManyFields,\n getMockSuccessNoResults,\n getMockSuccessWithWebArchiveHits,\n getMockSuccessWithManyAggregations,\n getMockSuccessTvFields,\n getMockSuccessArchiveOrgUserResult,\n getMockSuccessArchiveOrgUserNoBlurResult,\n} from './mock-search-responses';\n\nconst responses: Record<\n string,\n () => Result<SearchResponse, SearchServiceError>\n> = {\n 'single-result': getMockSuccessSingleResult,\n years: getMockSuccessWithYearHistogramAggs,\n months: getMockSuccessWithDateHistogramAggs,\n 'multi-line-description': getMockSuccessMultiLineDescription,\n loggedin: getMockSuccessLoggedInResult,\n 'no-preview': getMockSuccessNoPreviewResult,\n 'loggedin-no-preview': getMockSuccessLoggedInAndNoPreviewResult,\n 'archive-org-user-loggedin': getMockSuccessArchiveOrgUserResult,\n 'archive-org-user-loggedin-noblur': getMockSuccessArchiveOrgUserNoBlurResult,\n 'first-title': getMockSuccessFirstTitleResult,\n 'first-creator': getMockSuccessFirstCreatorResult,\n 'collection-titles': getMockSuccessWithCollectionTitles,\n 'channel-aliases': getMockSuccessWithChannelAliases,\n 'collection-aggregations': getMockSuccessWithCollectionAggregations,\n 'extra-quoted-href': getMockSuccessExtraQuotedHref,\n 'default-sort': getMockSuccessWithDefaultSort,\n 'default-sort-concise': getMockSuccessWithConciseDefaultSort,\n 'fav-sort': getMockSuccessWithDefaultFavSort,\n 'parent-collections': getMockSuccessWithParentCollections,\n 'tv-collection': getMockSuccessForTvCollection,\n 'web-archive': getMockSuccessWithWebArchiveHits,\n 'more-facets': getMockSuccessWithManyAggregations,\n 'many-fields': getMockSuccessManyFields,\n 'tv-fields': getMockSuccessTvFields,\n 'no-results': getMockSuccessNoResults,\n error: getMockErrorResult,\n malformed: getMockMalformedResult,\n};\n\nexport class MockSearchService implements SearchServiceInterface {\n searchParams?: SearchParams;\n\n searchType?: SearchType;\n\n asyncResponse: boolean;\n\n asyncResponseDelay: number;\n\n resultsSpy: Function;\n\n constructor({\n asyncResponse = false,\n asyncResponseDelay = 0,\n resultsSpy = () => {},\n } = {}) {\n this.asyncResponse = asyncResponse;\n this.asyncResponseDelay = asyncResponseDelay;\n this.resultsSpy = resultsSpy;\n }\n\n async search(\n params: SearchParams,\n searchType: SearchType,\n ): Promise<Result<SearchResponse, SearchServiceError>> {\n this.searchParams = params;\n this.searchType = searchType;\n\n if (this.asyncResponse) {\n // Add an artificial 1-tick delay\n await new Promise(res => {\n setTimeout(res, this.asyncResponseDelay);\n });\n }\n\n const responseKey =\n (this.searchParams.query || this.searchParams.pageTarget) ?? '';\n const resultFn: () => Result<SearchResponse, SearchServiceError> =\n responses[responseKey] ?? getMockSuccessMultipleResults;\n let result = resultFn();\n\n // with-sort query has special handling\n if (this.searchParams.query === 'with-sort') {\n result = getMockSuccessSingleResultWithSort(this.resultsSpy);\n }\n\n // Apply any uid param from the request\n if (result.success) {\n (result.success.request.clientParameters as any).uid = params.uid;\n }\n\n return result;\n }\n\n async itemDetails(\n _: string,\n ): Promise<Result<SearchResponse, SearchServiceError>> {\n // We don't currently use the itemDetails method in collection-browser\n throw new Error('not implemented');\n }\n}\n"]}