@internetarchive/collection-browser 2.7.12 → 2.7.13-alpha2

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 (498) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +3 -3
  3. package/.github/workflows/gh-pages-main.yml +2 -2
  4. package/.github/workflows/pr-preview.yml +2 -2
  5. package/.husky/pre-commit +4 -4
  6. package/.prettierignore +1 -0
  7. package/LICENSE +661 -661
  8. package/README.md +83 -83
  9. package/dist/index.d.ts +13 -13
  10. package/dist/index.js +11 -13
  11. package/dist/index.js.map +1 -1
  12. package/dist/src/app-root.d.ts +109 -107
  13. package/dist/src/app-root.js +541 -531
  14. package/dist/src/app-root.js.map +1 -1
  15. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  16. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  17. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  18. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  19. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  20. package/dist/src/assets/img/icons/chevron.js +2 -2
  21. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  22. package/dist/src/assets/img/icons/contract.js +2 -2
  23. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  24. package/dist/src/assets/img/icons/empty-query.js +2 -2
  25. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  26. package/dist/src/assets/img/icons/expand.js +2 -2
  27. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  28. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  29. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  30. package/dist/src/assets/img/icons/eye.js +2 -2
  31. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  32. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  33. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  34. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  35. package/dist/src/assets/img/icons/filter.d.ts +2 -2
  36. package/dist/src/assets/img/icons/filter.js +2 -2
  37. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  38. package/dist/src/assets/img/icons/login-required.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  59. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  60. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  61. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  62. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  63. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  64. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  65. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  66. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  67. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  68. package/dist/src/assets/img/icons/null-result.js +2 -2
  69. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  70. package/dist/src/assets/img/icons/restricted.js +2 -2
  71. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  72. package/dist/src/assets/img/icons/reviews.js +2 -2
  73. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  74. package/dist/src/assets/img/icons/upload.js +2 -2
  75. package/dist/src/assets/img/icons/views.d.ts +1 -1
  76. package/dist/src/assets/img/icons/views.js +2 -2
  77. package/dist/src/circular-activity-indicator.d.ts +5 -5
  78. package/dist/src/circular-activity-indicator.js +17 -17
  79. package/dist/src/circular-activity-indicator.js.map +1 -1
  80. package/dist/src/collection-browser.d.ts +607 -606
  81. package/dist/src/collection-browser.js +1683 -1677
  82. package/dist/src/collection-browser.js.map +1 -1
  83. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  84. package/dist/src/collection-facets/facet-row.js +118 -118
  85. package/dist/src/collection-facets/facet-row.js.map +1 -1
  86. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  87. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  88. package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -1
  89. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  90. package/dist/src/collection-facets/facets-template.js +49 -49
  91. package/dist/src/collection-facets/facets-template.js.map +1 -1
  92. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  93. package/dist/src/collection-facets/more-facets-content.js +406 -408
  94. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  95. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  96. package/dist/src/collection-facets/more-facets-pagination.js +197 -196
  97. package/dist/src/collection-facets/more-facets-pagination.js.map +1 -1
  98. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  99. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  100. package/dist/src/collection-facets/smart-facets/dedupe.js.map +1 -1
  101. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  102. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  103. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  104. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  105. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js.map +1 -1
  106. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  107. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  108. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js.map +1 -1
  109. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  110. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  111. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  112. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +237 -240
  113. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
  114. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  115. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  116. package/dist/src/collection-facets/smart-facets/smart-facet-button.js.map +1 -1
  117. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  118. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  119. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
  120. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  121. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  122. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  123. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  124. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js.map +1 -1
  125. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  126. package/dist/src/collection-facets/toggle-switch.js +94 -94
  127. package/dist/src/collection-facets/toggle-switch.js.map +1 -1
  128. package/dist/src/collection-facets.d.ts +103 -103
  129. package/dist/src/collection-facets.js +521 -522
  130. package/dist/src/collection-facets.js.map +1 -1
  131. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +245 -245
  132. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  133. package/dist/src/data-source/collection-browser-data-source-interface.js.map +1 -1
  134. package/dist/src/data-source/collection-browser-data-source.d.ts +377 -377
  135. package/dist/src/data-source/collection-browser-data-source.js +1003 -1001
  136. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  137. package/dist/src/data-source/collection-browser-query-state.d.ts +44 -44
  138. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  139. package/dist/src/data-source/models.d.ts +28 -28
  140. package/dist/src/data-source/models.js +8 -8
  141. package/dist/src/empty-placeholder.d.ts +23 -23
  142. package/dist/src/empty-placeholder.js +87 -88
  143. package/dist/src/empty-placeholder.js.map +1 -1
  144. package/dist/src/expanded-date-picker.d.ts +43 -43
  145. package/dist/src/expanded-date-picker.js +109 -109
  146. package/dist/src/expanded-date-picker.js.map +1 -1
  147. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  148. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  149. package/dist/src/language-code-handler/language-code-handler.js.map +1 -1
  150. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  151. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  152. package/dist/src/language-code-handler/language-code-mapping.js.map +1 -1
  153. package/dist/src/manage/manage-bar.d.ts +58 -58
  154. package/dist/src/manage/manage-bar.js +175 -175
  155. package/dist/src/manage/manage-bar.js.map +1 -1
  156. package/dist/src/manage/remove-items-modal-content.d.ts +9 -9
  157. package/dist/src/manage/remove-items-modal-content.js +34 -34
  158. package/dist/src/manage/remove-items-modal-content.js.map +1 -1
  159. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  160. package/dist/src/mediatype/mediatype-config.js +92 -91
  161. package/dist/src/mediatype/mediatype-config.js.map +1 -1
  162. package/dist/src/models.d.ts +228 -228
  163. package/dist/src/models.js +401 -401
  164. package/dist/src/models.js.map +1 -1
  165. package/dist/src/restoration-state-handler.d.ts +70 -70
  166. package/dist/src/restoration-state-handler.js +362 -363
  167. package/dist/src/restoration-state-handler.js.map +1 -1
  168. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  169. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  170. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js.map +1 -1
  171. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  172. package/dist/src/sort-filter-bar/alpha-bar.js +136 -136
  173. package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
  174. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  175. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  176. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  177. package/dist/src/sort-filter-bar/img/list.js +2 -2
  178. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  179. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  180. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  181. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  182. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  183. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  184. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  185. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  186. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  187. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  188. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  189. package/dist/src/sort-filter-bar/sort-filter-bar.js +696 -697
  190. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  191. package/dist/src/styles/ia-button.d.ts +2 -2
  192. package/dist/src/styles/ia-button.js +17 -17
  193. package/dist/src/styles/item-image-styles.d.ts +8 -8
  194. package/dist/src/styles/item-image-styles.js +9 -9
  195. package/dist/src/styles/sr-only.d.ts +1 -1
  196. package/dist/src/styles/sr-only.js +2 -2
  197. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  198. package/dist/src/tiles/base-tile-component.js +64 -64
  199. package/dist/src/tiles/base-tile-component.js.map +1 -1
  200. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  201. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  202. package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -1
  203. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  204. package/dist/src/tiles/grid/account-tile.js +72 -72
  205. package/dist/src/tiles/grid/account-tile.js.map +1 -1
  206. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  207. package/dist/src/tiles/grid/collection-tile.js +80 -80
  208. package/dist/src/tiles/grid/collection-tile.js.map +1 -1
  209. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  210. package/dist/src/tiles/grid/item-tile.js +159 -160
  211. package/dist/src/tiles/grid/item-tile.js.map +1 -1
  212. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  213. package/dist/src/tiles/grid/search-tile.js +51 -51
  214. package/dist/src/tiles/grid/search-tile.js.map +1 -1
  215. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  216. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  217. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  218. package/dist/src/tiles/grid/tile-stats.js +54 -54
  219. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  220. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  221. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  222. package/dist/src/tiles/hover/hover-pane-controller.js.map +1 -1
  223. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  224. package/dist/src/tiles/hover/tile-hover-pane.js +72 -70
  225. package/dist/src/tiles/hover/tile-hover-pane.js.map +1 -1
  226. package/dist/src/tiles/image-block.d.ts +18 -18
  227. package/dist/src/tiles/image-block.js +89 -89
  228. package/dist/src/tiles/image-block.js.map +1 -1
  229. package/dist/src/tiles/item-image.d.ts +39 -39
  230. package/dist/src/tiles/item-image.js +154 -154
  231. package/dist/src/tiles/item-image.js.map +1 -1
  232. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  233. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  234. package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -1
  235. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  236. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  237. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  238. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  239. package/dist/src/tiles/list/tile-list.js +324 -326
  240. package/dist/src/tiles/list/tile-list.js.map +1 -1
  241. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  242. package/dist/src/tiles/mediatype-icon.js +47 -47
  243. package/dist/src/tiles/mediatype-icon.js.map +1 -1
  244. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  245. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  246. package/dist/src/tiles/overlay/icon-overlay.js.map +1 -1
  247. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  248. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  249. package/dist/src/tiles/overlay/text-overlay.js.map +1 -1
  250. package/dist/src/tiles/review-block.d.ts +12 -12
  251. package/dist/src/tiles/review-block.js +56 -56
  252. package/dist/src/tiles/review-block.js.map +1 -1
  253. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  254. package/dist/src/tiles/text-snippet-block.js +73 -73
  255. package/dist/src/tiles/text-snippet-block.js.map +1 -1
  256. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  257. package/dist/src/tiles/tile-dispatcher.js +230 -230
  258. package/dist/src/tiles/tile-dispatcher.js.map +1 -1
  259. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  260. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  261. package/dist/src/tiles/tile-display-value-provider.js.map +1 -1
  262. package/dist/src/utils/analytics-events.d.ts +28 -28
  263. package/dist/src/utils/analytics-events.js +30 -30
  264. package/dist/src/utils/array-equals.d.ts +4 -4
  265. package/dist/src/utils/array-equals.js +10 -10
  266. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  267. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  268. package/dist/src/utils/facet-utils.d.ts +83 -83
  269. package/dist/src/utils/facet-utils.js +145 -145
  270. package/dist/src/utils/facet-utils.js.map +1 -1
  271. package/dist/src/utils/format-count.d.ts +7 -7
  272. package/dist/src/utils/format-count.js +75 -76
  273. package/dist/src/utils/format-count.js.map +1 -1
  274. package/dist/src/utils/format-date.d.ts +2 -2
  275. package/dist/src/utils/format-date.js +27 -27
  276. package/dist/src/utils/format-date.js.map +1 -1
  277. package/dist/src/utils/format-unit-size.d.ts +2 -2
  278. package/dist/src/utils/format-unit-size.js +33 -33
  279. package/dist/src/utils/format-unit-size.js.map +1 -1
  280. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  281. package/dist/src/utils/local-date-from-utc.js +15 -15
  282. package/dist/src/utils/log.d.ts +7 -7
  283. package/dist/src/utils/log.js +13 -15
  284. package/dist/src/utils/log.js.map +1 -1
  285. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  286. package/dist/src/utils/resolve-mediatype.js +23 -23
  287. package/dist/src/utils/resolve-mediatype.js.map +1 -1
  288. package/dist/src/utils/sha1.d.ts +2 -2
  289. package/dist/src/utils/sha1.js +8 -8
  290. package/dist/test/collection-browser.test.d.ts +1 -1
  291. package/dist/test/collection-browser.test.js +1309 -1308
  292. package/dist/test/collection-browser.test.js.map +1 -1
  293. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  294. package/dist/test/collection-facets/facet-row.test.js +230 -227
  295. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  296. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  297. package/dist/test/collection-facets/facets-template.test.js +91 -91
  298. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  299. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  300. package/dist/test/collection-facets/more-facets-content.test.js +140 -141
  301. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  302. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  303. package/dist/test/collection-facets/more-facets-pagination.test.js +116 -117
  304. package/dist/test/collection-facets/more-facets-pagination.test.js.map +1 -1
  305. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  306. package/dist/test/collection-facets/toggle-switch.test.js +82 -73
  307. package/dist/test/collection-facets/toggle-switch.test.js.map +1 -1
  308. package/dist/test/collection-facets.test.d.ts +2 -2
  309. package/dist/test/collection-facets.test.js +692 -692
  310. package/dist/test/collection-facets.test.js.map +1 -1
  311. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  312. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  313. package/dist/test/data-source/collection-browser-data-source.test.js.map +1 -1
  314. package/dist/test/empty-placeholder.test.d.ts +1 -1
  315. package/dist/test/empty-placeholder.test.js +62 -63
  316. package/dist/test/empty-placeholder.test.js.map +1 -1
  317. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  318. package/dist/test/expanded-date-picker.test.js +97 -96
  319. package/dist/test/expanded-date-picker.test.js.map +1 -1
  320. package/dist/test/icon-overlay.test.d.ts +1 -1
  321. package/dist/test/icon-overlay.test.js +23 -24
  322. package/dist/test/icon-overlay.test.js.map +1 -1
  323. package/dist/test/image-block.test.d.ts +1 -1
  324. package/dist/test/image-block.test.js +106 -107
  325. package/dist/test/image-block.test.js.map +1 -1
  326. package/dist/test/item-image.test.d.ts +1 -1
  327. package/dist/test/item-image.test.js +84 -85
  328. package/dist/test/item-image.test.js.map +1 -1
  329. package/dist/test/manage/manage-bar.test.d.ts +2 -2
  330. package/dist/test/manage/manage-bar.test.js +100 -101
  331. package/dist/test/manage/manage-bar.test.js.map +1 -1
  332. package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -1
  333. package/dist/test/manage/remove-items-modal-content.test.js +44 -45
  334. package/dist/test/manage/remove-items-modal-content.test.js.map +1 -1
  335. package/dist/test/mediatype-config.test.d.ts +1 -1
  336. package/dist/test/mediatype-config.test.js +16 -16
  337. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  338. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  339. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  340. package/dist/test/mocks/mock-search-responses.js +942 -942
  341. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  342. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  343. package/dist/test/mocks/mock-search-service.js +54 -54
  344. package/dist/test/mocks/mock-search-service.js.map +1 -1
  345. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  346. package/dist/test/restoration-state-handler.test.js +270 -270
  347. package/dist/test/restoration-state-handler.test.js.map +1 -1
  348. package/dist/test/review-block.test.d.ts +1 -1
  349. package/dist/test/review-block.test.js +43 -44
  350. package/dist/test/review-block.test.js.map +1 -1
  351. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  352. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  353. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js.map +1 -1
  354. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  355. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  356. package/dist/test/sort-filter-bar/alpha-bar.test.js.map +1 -1
  357. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  358. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +425 -426
  359. package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
  360. package/dist/test/text-overlay.test.d.ts +1 -1
  361. package/dist/test/text-overlay.test.js +37 -38
  362. package/dist/test/text-overlay.test.js.map +1 -1
  363. package/dist/test/text-snippet-block.test.d.ts +1 -1
  364. package/dist/test/text-snippet-block.test.js +56 -57
  365. package/dist/test/text-snippet-block.test.js.map +1 -1
  366. package/dist/test/tile-stats.test.d.ts +1 -1
  367. package/dist/test/tile-stats.test.js +98 -99
  368. package/dist/test/tile-stats.test.js.map +1 -1
  369. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  370. package/dist/test/tiles/grid/account-tile.test.js +75 -76
  371. package/dist/test/tiles/grid/account-tile.test.js.map +1 -1
  372. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  373. package/dist/test/tiles/grid/collection-tile.test.js +72 -73
  374. package/dist/test/tiles/grid/collection-tile.test.js.map +1 -1
  375. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  376. package/dist/test/tiles/grid/item-tile.test.js +311 -312
  377. package/dist/test/tiles/grid/item-tile.test.js.map +1 -1
  378. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  379. package/dist/test/tiles/grid/search-tile.test.js +50 -51
  380. package/dist/test/tiles/grid/search-tile.test.js.map +1 -1
  381. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  382. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  383. package/dist/test/tiles/hover/hover-pane-controller.test.js.map +1 -1
  384. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  385. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  386. package/dist/test/tiles/hover/tile-hover-pane.test.js.map +1 -1
  387. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  388. package/dist/test/tiles/list/tile-list-compact.test.js +142 -143
  389. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  390. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  391. package/dist/test/tiles/list/tile-list.test.js +296 -297
  392. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  393. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  394. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  395. package/dist/test/tiles/tile-dispatcher.test.js.map +1 -1
  396. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  397. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  398. package/dist/test/utils/array-equals.test.d.ts +1 -1
  399. package/dist/test/utils/array-equals.test.js +26 -26
  400. package/dist/test/utils/format-count.test.d.ts +1 -1
  401. package/dist/test/utils/format-count.test.js +23 -23
  402. package/dist/test/utils/format-count.test.js.map +1 -1
  403. package/dist/test/utils/format-date.test.d.ts +1 -1
  404. package/dist/test/utils/format-date.test.js +30 -30
  405. package/dist/test/utils/format-date.test.js.map +1 -1
  406. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  407. package/dist/test/utils/format-unit-size.test.js +17 -17
  408. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  409. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  410. package/dist/test/utils/local-date-from-utc.test.js.map +1 -1
  411. package/eslint.config.mjs +53 -0
  412. package/index.html +0 -3
  413. package/local.archive.org.cert +86 -86
  414. package/local.archive.org.key +27 -27
  415. package/package.json +41 -39
  416. package/renovate.json +6 -6
  417. package/src/app-root.ts +33 -23
  418. package/src/collection-browser.ts +44 -42
  419. package/src/collection-facets/facets-template.ts +7 -6
  420. package/src/collection-facets/more-facets-content.ts +11 -13
  421. package/src/collection-facets/more-facets-pagination.ts +3 -2
  422. package/src/collection-facets/smart-facets/dedupe.ts +2 -2
  423. package/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.ts +1 -1
  424. package/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.ts +6 -6
  425. package/src/collection-facets/smart-facets/smart-facet-bar.ts +6 -8
  426. package/src/collection-facets/smart-facets/smart-facet-button.ts +5 -3
  427. package/src/collection-facets/smart-facets/smart-facet-dropdown.ts +4 -4
  428. package/src/collection-facets/smart-facets/smart-facet-heuristics.ts +1 -1
  429. package/src/collection-facets/toggle-switch.ts +2 -2
  430. package/src/collection-facets.ts +18 -19
  431. package/src/data-source/collection-browser-data-source-interface.ts +5 -1
  432. package/src/data-source/collection-browser-data-source.ts +42 -35
  433. package/src/empty-placeholder.ts +19 -16
  434. package/src/expanded-date-picker.ts +1 -1
  435. package/src/language-code-handler/language-code-handler.ts +1 -1
  436. package/src/manage/manage-bar.ts +23 -20
  437. package/src/manage/remove-items-modal-content.ts +2 -2
  438. package/src/mediatype/mediatype-config.ts +1 -0
  439. package/src/models.ts +3 -3
  440. package/src/restoration-state-handler.ts +14 -15
  441. package/src/sort-filter-bar/alpha-bar.ts +16 -17
  442. package/src/sort-filter-bar/sort-filter-bar.ts +14 -15
  443. package/src/tiles/grid/account-tile.ts +1 -1
  444. package/src/tiles/grid/collection-tile.ts +1 -1
  445. package/src/tiles/grid/item-tile.ts +9 -9
  446. package/src/tiles/grid/tile-stats.ts +4 -4
  447. package/src/tiles/hover/hover-pane-controller.ts +1 -1
  448. package/src/tiles/hover/tile-hover-pane.ts +4 -2
  449. package/src/tiles/item-image.ts +1 -1
  450. package/src/tiles/list/tile-list-compact.ts +2 -2
  451. package/src/tiles/list/tile-list.ts +22 -24
  452. package/src/tiles/tile-dispatcher.ts +5 -5
  453. package/src/tiles/tile-display-value-provider.ts +4 -4
  454. package/src/utils/facet-utils.ts +6 -6
  455. package/src/utils/format-count.ts +2 -3
  456. package/src/utils/format-date.ts +1 -1
  457. package/src/utils/format-unit-size.ts +1 -1
  458. package/src/utils/log.ts +1 -3
  459. package/test/collection-browser.test.ts +125 -124
  460. package/test/collection-facets/facet-row.test.ts +31 -28
  461. package/test/collection-facets/facets-template.test.ts +9 -9
  462. package/test/collection-facets/more-facets-content.test.ts +14 -15
  463. package/test/collection-facets/more-facets-pagination.test.ts +18 -19
  464. package/test/collection-facets/toggle-switch.test.ts +28 -18
  465. package/test/collection-facets.test.ts +46 -39
  466. package/test/data-source/collection-browser-data-source.test.ts +2 -2
  467. package/test/empty-placeholder.test.ts +6 -7
  468. package/test/expanded-date-picker.test.ts +25 -20
  469. package/test/icon-overlay.test.ts +0 -1
  470. package/test/image-block.test.ts +6 -7
  471. package/test/item-image.test.ts +0 -1
  472. package/test/manage/manage-bar.test.ts +19 -16
  473. package/test/manage/remove-items-modal-content.test.ts +4 -5
  474. package/test/mocks/mock-search-responses.ts +2 -1
  475. package/test/mocks/mock-search-service.ts +1 -1
  476. package/test/restoration-state-handler.test.ts +12 -12
  477. package/test/review-block.test.ts +1 -2
  478. package/test/sort-filter-bar/alpha-bar-tooltip.test.ts +1 -1
  479. package/test/sort-filter-bar/alpha-bar.test.ts +5 -5
  480. package/test/sort-filter-bar/sort-filter-bar.test.ts +38 -39
  481. package/test/text-overlay.test.ts +0 -1
  482. package/test/text-snippet-block.test.ts +5 -6
  483. package/test/tile-stats.test.ts +26 -35
  484. package/test/tiles/grid/account-tile.test.ts +2 -3
  485. package/test/tiles/grid/collection-tile.test.ts +3 -4
  486. package/test/tiles/grid/item-tile.test.ts +13 -14
  487. package/test/tiles/grid/search-tile.test.ts +1 -2
  488. package/test/tiles/hover/hover-pane-controller.test.ts +15 -15
  489. package/test/tiles/hover/tile-hover-pane.test.ts +5 -5
  490. package/test/tiles/list/tile-list-compact.test.ts +1 -2
  491. package/test/tiles/list/tile-list.test.ts +10 -11
  492. package/test/tiles/tile-dispatcher.test.ts +5 -5
  493. package/test/utils/format-count.test.ts +1 -1
  494. package/test/utils/format-date.test.ts +1 -1
  495. package/test/utils/local-date-from-utc.test.ts +1 -1
  496. package/tsconfig.json +0 -1
  497. package/web-dev-server.config.mjs +30 -30
  498. package/web-test-runner.config.mjs +41 -41
@@ -1,1458 +1,1459 @@
1
- /* eslint-disable import/no-duplicates */
2
- import { aTimeout, expect, fixture } from '@open-wc/testing';
3
- import { html } from 'lit';
4
- import sinon from 'sinon';
5
- import { FilterConstraint, SearchType } from '@internetarchive/search-service';
6
- import '../src/collection-browser';
7
- import { getDefaultSelectedFacets, SortField, } from '../src/models';
8
- import { MockSearchService } from './mocks/mock-search-service';
9
- import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
10
- import { analyticsActions, analyticsCategories, } from '../src/utils/analytics-events';
11
- /**
12
- * Wait for the next tick of the event loop.
13
- *
14
- * This is necessary in some of the tests because certain collection browser
15
- * updates take more than one tick to render (e.g., date picker & query changes).
16
- * These delays are non-ideal and should eventually be investigated and fixed,
17
- * but they are minor enough that waiting for the next tick is a reasonable
18
- * testing solution for now.
19
- */
20
- const nextTick = () => aTimeout(0);
21
- describe('Collection Browser', () => {
22
- beforeEach(async () => {
23
- // Apparently query params set by one test can bleed into other tests.
24
- // Since collection browser restores its state from certain query params, we need
25
- // to clear these before each test to ensure they run in isolation from one another.
26
- const url = new URL(window.location.href);
27
- const { searchParams } = url;
28
- searchParams.delete('sin');
29
- searchParams.delete('sort');
30
- searchParams.delete('query');
31
- searchParams.delete('page');
32
- searchParams.delete('and[]');
33
- searchParams.delete('not[]');
34
- window.history.replaceState({}, '', url);
35
- });
36
- it('clears selected facets when requested', async () => {
37
- const selectedFacets = getDefaultSelectedFacets();
38
- selectedFacets.creator.foo = { count: 1, key: 'foo', state: 'selected' };
39
- const el = await fixture(html `<collection-browser></collection-browser>`);
40
- el.selectedFacets = selectedFacets;
41
- await el.updateComplete;
42
- el.clearFilters(); // By default, sort is not cleared
43
- expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
44
- });
45
- it('clears existing filters but not sort by default', async () => {
46
- const el = await fixture(html `<collection-browser></collection-browser>`);
47
- el.selectedSort = 'title';
48
- el.sortDirection = 'asc';
49
- await el.updateComplete;
50
- el.clearFilters(); // By default, sort is not cleared
51
- expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
52
- expect(el.selectedSort).to.equal('title');
53
- expect(el.sortDirection).to.equal('asc');
54
- expect(el.sortParam).to.deep.equal({
55
- field: 'titleSorter',
56
- direction: 'asc',
57
- });
58
- expect(el.selectedCreatorFilter).to.be.null;
59
- expect(el.selectedTitleFilter).to.be.null;
60
- });
61
- it('clears existing filters for facets & sort via option', async () => {
62
- const el = await fixture(html `<collection-browser></collection-browser>`);
63
- el.selectedSort = 'title';
64
- await el.updateComplete;
65
- el.clearFilters({ sort: true }); // Sort is reset too due to the option
66
- expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
67
- expect(el.selectedSort).to.equal(SortField.default);
68
- expect(el.sortDirection).to.be.null;
69
- expect(el.sortParam).to.be.null;
70
- expect(el.selectedCreatorFilter).to.be.null;
71
- expect(el.selectedTitleFilter).to.be.null;
72
- });
73
- it('filterBy creator with analytics', async () => {
74
- const mockAnalyticsHandler = new MockAnalyticsHandler();
1
+ import { aTimeout, expect, fixture } from '@open-wc/testing';
2
+ import { html } from 'lit';
3
+ import sinon from 'sinon';
4
+ import { FilterConstraint, SearchType } from '@internetarchive/search-service';
5
+ import '../src/collection-browser';
6
+ import { getDefaultSelectedFacets, SortField, } from '../src/models';
7
+ import { MockSearchService } from './mocks/mock-search-service';
8
+ import { MockAnalyticsHandler } from './mocks/mock-analytics-handler';
9
+ import { analyticsActions, analyticsCategories, } from '../src/utils/analytics-events';
10
+ /**
11
+ * Wait for the next tick of the event loop.
12
+ *
13
+ * This is necessary in some of the tests because certain collection browser
14
+ * updates take more than one tick to render (e.g., date picker & query changes).
15
+ * These delays are non-ideal and should eventually be investigated and fixed,
16
+ * but they are minor enough that waiting for the next tick is a reasonable
17
+ * testing solution for now.
18
+ */
19
+ const nextTick = () => aTimeout(0);
20
+ describe('Collection Browser', () => {
21
+ beforeEach(async () => {
22
+ // Apparently query params set by one test can bleed into other tests.
23
+ // Since collection browser restores its state from certain query params, we need
24
+ // to clear these before each test to ensure they run in isolation from one another.
25
+ const url = new URL(window.location.href);
26
+ const { searchParams } = url;
27
+ searchParams.delete('sin');
28
+ searchParams.delete('sort');
29
+ searchParams.delete('query');
30
+ searchParams.delete('page');
31
+ searchParams.delete('and[]');
32
+ searchParams.delete('not[]');
33
+ window.history.replaceState({}, '', url);
34
+ });
35
+ it('clears selected facets when requested', async () => {
36
+ const selectedFacets = getDefaultSelectedFacets();
37
+ selectedFacets.creator.foo = { count: 1, key: 'foo', state: 'selected' };
38
+ const el = await fixture(html `<collection-browser></collection-browser>`);
39
+ el.selectedFacets = selectedFacets;
40
+ await el.updateComplete;
41
+ el.clearFilters(); // By default, sort is not cleared
42
+ expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
43
+ });
44
+ it('clears existing filters but not sort by default', async () => {
45
+ const el = await fixture(html `<collection-browser></collection-browser>`);
46
+ el.selectedSort = 'title';
47
+ el.sortDirection = 'asc';
48
+ await el.updateComplete;
49
+ el.clearFilters(); // By default, sort is not cleared
50
+ expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
51
+ expect(el.selectedSort).to.equal('title');
52
+ expect(el.sortDirection).to.equal('asc');
53
+ expect(el.sortParam).to.deep.equal({
54
+ field: 'titleSorter',
55
+ direction: 'asc',
56
+ });
57
+ expect(el.selectedCreatorFilter).to.be.null;
58
+ expect(el.selectedTitleFilter).to.be.null;
59
+ });
60
+ it('clears existing filters for facets & sort via option', async () => {
61
+ const el = await fixture(html `<collection-browser></collection-browser>`);
62
+ el.selectedSort = 'title';
63
+ await el.updateComplete;
64
+ el.clearFilters({ sort: true }); // Sort is reset too due to the option
65
+ expect(el.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
66
+ expect(el.selectedSort).to.equal(SortField.default);
67
+ expect(el.sortDirection).to.be.null;
68
+ expect(el.sortParam).to.be.null;
69
+ expect(el.selectedCreatorFilter).to.be.null;
70
+ expect(el.selectedTitleFilter).to.be.null;
71
+ });
72
+ it('filterBy creator with analytics', async () => {
73
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
75
74
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
76
- </collection-browser>`);
77
- el.searchContext = 'betaSearchService';
78
- el.selectedSort = 'creator';
79
- el.sortDirection = 'asc';
80
- el.selectedCreatorFilter = 'A';
81
- await el.updateComplete;
82
- expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
83
- expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
84
- expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
85
- el.clearFilters();
86
- await el.updateComplete;
87
- expect(el.selectedTitleFilter).to.be.null;
88
- expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
89
- expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
90
- expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
91
- });
92
- it('filterBy title with analytics', async () => {
93
- const mockAnalyticsHandler = new MockAnalyticsHandler();
75
+ </collection-browser>`);
76
+ el.searchContext = 'betaSearchService';
77
+ el.selectedSort = 'creator';
78
+ el.sortDirection = 'asc';
79
+ el.selectedCreatorFilter = 'A';
80
+ await el.updateComplete;
81
+ expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
82
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
83
+ expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
84
+ el.clearFilters();
85
+ await el.updateComplete;
86
+ expect(el.selectedTitleFilter).to.be.null;
87
+ expect(mockAnalyticsHandler.callCategory).to.equal('betaSearchService');
88
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByCreator');
89
+ expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
90
+ });
91
+ it('filterBy title with analytics', async () => {
92
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
94
93
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
95
- </collection-browser>`);
96
- el.searchContext = 'beta-search-service';
97
- el.selectedSort = 'title';
98
- el.sortDirection = 'asc';
99
- el.selectedTitleFilter = 'A';
100
- await el.updateComplete;
101
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
102
- expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
103
- expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
104
- el.clearFilters();
105
- await el.updateComplete;
106
- expect(el.selectedTitleFilter).to.be.null;
107
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
108
- expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
109
- expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
110
- });
111
- it('selected facets with analytics - not negative facets', async () => {
112
- const mockAnalyticsHandler = new MockAnalyticsHandler();
113
- const mediaTypeBucket = { count: 123, state: 'selected' };
114
- const mockedSelectedFacets = {
115
- subject: {},
116
- lending: {},
117
- mediatype: { data: mediaTypeBucket },
118
- language: {},
119
- creator: {},
120
- collection: {},
121
- year: {},
122
- };
94
+ </collection-browser>`);
95
+ el.searchContext = 'beta-search-service';
96
+ el.selectedSort = 'title';
97
+ el.sortDirection = 'asc';
98
+ el.selectedTitleFilter = 'A';
99
+ await el.updateComplete;
100
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
101
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
102
+ expect(mockAnalyticsHandler.callLabel).to.equal('start-A');
103
+ el.clearFilters();
104
+ await el.updateComplete;
105
+ expect(el.selectedTitleFilter).to.be.null;
106
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
107
+ expect(mockAnalyticsHandler.callAction).to.equal('filterByTitle');
108
+ expect(mockAnalyticsHandler.callLabel).to.equal('clear-A');
109
+ });
110
+ it('selected facets with analytics - not negative facets', async () => {
111
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
112
+ const mediaTypeBucket = { count: 123, state: 'selected' };
113
+ const mockedSelectedFacets = {
114
+ subject: {},
115
+ lending: {},
116
+ mediatype: { data: mediaTypeBucket },
117
+ language: {},
118
+ creator: {},
119
+ collection: {},
120
+ year: {},
121
+ };
123
122
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
124
- </collection-browser>`);
125
- el.searchContext = 'search-service';
126
- el.selectedFacets = mockedSelectedFacets;
127
- await el.updateComplete;
128
- el.facetClickHandler(new CustomEvent('facetClick', {
129
- detail: {
130
- facetType: 'mediatype',
131
- bucket: {
132
- key: '',
133
- state: 'selected',
134
- count: 123,
135
- },
136
- negative: false,
137
- },
138
- }));
139
- expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
140
- expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');
141
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
142
- el.facetClickHandler(new CustomEvent('facetClick', {
143
- detail: {
144
- facetType: 'mediatype',
145
- bucket: {
146
- key: '',
147
- state: 'none',
148
- count: 123,
149
- },
150
- negative: false,
151
- },
152
- }));
153
- expect(el.selectedFacets).to.equal(mockedSelectedFacets);
154
- expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
155
- expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');
156
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
157
- });
158
- it('selected facets with analytics - negative facets', async () => {
159
- const mockAnalyticsHandler = new MockAnalyticsHandler();
160
- const mediaTypeBucket = { count: 123, state: 'selected' };
161
- const mockedSelectedFacets = {
162
- subject: {},
163
- lending: {},
164
- mediatype: { data: mediaTypeBucket },
165
- language: {},
166
- creator: {},
167
- collection: {},
168
- year: {},
169
- };
123
+ </collection-browser>`);
124
+ el.searchContext = 'search-service';
125
+ el.selectedFacets = mockedSelectedFacets;
126
+ await el.updateComplete;
127
+ el.facetClickHandler(new CustomEvent('facetClick', {
128
+ detail: {
129
+ facetType: 'mediatype',
130
+ bucket: {
131
+ key: '',
132
+ state: 'selected',
133
+ count: 123,
134
+ },
135
+ negative: false,
136
+ },
137
+ }));
138
+ expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
139
+ expect(mockAnalyticsHandler.callAction).to.equal('facetSelected');
140
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
141
+ el.facetClickHandler(new CustomEvent('facetClick', {
142
+ detail: {
143
+ facetType: 'mediatype',
144
+ bucket: {
145
+ key: '',
146
+ state: 'none',
147
+ count: 123,
148
+ },
149
+ negative: false,
150
+ },
151
+ }));
152
+ expect(el.selectedFacets).to.equal(mockedSelectedFacets);
153
+ expect(mockAnalyticsHandler.callCategory).to.equal('search-service');
154
+ expect(mockAnalyticsHandler.callAction).to.equal('facetDeselected');
155
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
156
+ });
157
+ it('selected facets with analytics - negative facets', async () => {
158
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
159
+ const mediaTypeBucket = { count: 123, state: 'selected' };
160
+ const mockedSelectedFacets = {
161
+ subject: {},
162
+ lending: {},
163
+ mediatype: { data: mediaTypeBucket },
164
+ language: {},
165
+ creator: {},
166
+ collection: {},
167
+ year: {},
168
+ };
170
169
  const el = await fixture(html `<collection-browser .analyticsHandler=${mockAnalyticsHandler}>
171
- </collection-browser>`);
172
- el.searchContext = 'beta-search-service';
173
- el.selectedFacets = mockedSelectedFacets;
174
- await el.updateComplete;
175
- el.facetClickHandler(new CustomEvent('facetClick', {
176
- detail: {
177
- facetType: 'mediatype',
178
- bucket: {
179
- key: '',
180
- state: 'hidden',
181
- count: 123,
182
- },
183
- negative: true,
184
- },
185
- }));
186
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
187
- expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');
188
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
189
- el.facetClickHandler(new CustomEvent('facetClick', {
190
- detail: {
191
- facetType: 'mediatype',
192
- bucket: {
193
- key: '',
194
- state: 'none',
195
- count: 123,
196
- },
197
- negative: true,
198
- },
199
- }));
200
- expect(el.selectedFacets).to.equal(mockedSelectedFacets);
201
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
202
- expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');
203
- expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
204
- });
205
- it('should render with a sort bar, facets, and infinite scroller', async () => {
206
- var _a, _b, _c;
207
- const searchService = new MockSearchService();
170
+ </collection-browser>`);
171
+ el.searchContext = 'beta-search-service';
172
+ el.selectedFacets = mockedSelectedFacets;
173
+ await el.updateComplete;
174
+ el.facetClickHandler(new CustomEvent('facetClick', {
175
+ detail: {
176
+ facetType: 'mediatype',
177
+ bucket: {
178
+ key: '',
179
+ state: 'hidden',
180
+ count: 123,
181
+ },
182
+ negative: true,
183
+ },
184
+ }));
185
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
186
+ expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeSelected');
187
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
188
+ el.facetClickHandler(new CustomEvent('facetClick', {
189
+ detail: {
190
+ facetType: 'mediatype',
191
+ bucket: {
192
+ key: '',
193
+ state: 'none',
194
+ count: 123,
195
+ },
196
+ negative: true,
197
+ },
198
+ }));
199
+ expect(el.selectedFacets).to.equal(mockedSelectedFacets);
200
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search-service');
201
+ expect(mockAnalyticsHandler.callAction).to.equal('facetNegativeDeselected');
202
+ expect(mockAnalyticsHandler.callLabel).to.equal('mediatype');
203
+ });
204
+ it('should render with a sort bar, facets, and infinite scroller', async () => {
205
+ var _a, _b, _c;
206
+ const searchService = new MockSearchService();
208
207
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
209
- </collection-browser>`);
210
- el.baseQuery = 'hello';
211
- await el.updateComplete;
212
- await nextTick();
213
- const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
214
- const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
215
- const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
216
- expect(facets, 'facets').to.exist;
217
- expect(sortBar, 'sort bar').to.exist;
218
- expect(infiniteScroller, 'infinite scroller').to.exist;
219
- });
220
- it('queries the search service when given a base query', async () => {
221
- var _a, _b, _c;
222
- const searchService = new MockSearchService();
208
+ </collection-browser>`);
209
+ el.baseQuery = 'hello';
210
+ await el.updateComplete;
211
+ await nextTick();
212
+ const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
213
+ const sortBar = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar');
214
+ const infiniteScroller = (_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('infinite-scroller');
215
+ expect(facets, 'facets').to.exist;
216
+ expect(sortBar, 'sort bar').to.exist;
217
+ expect(infiniteScroller, 'infinite scroller').to.exist;
218
+ });
219
+ it('queries the search service when given a base query', async () => {
220
+ var _a, _b, _c;
221
+ const searchService = new MockSearchService();
223
222
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
224
- </collection-browser>`);
225
- el.baseQuery = 'collection:foo';
226
- await el.updateComplete;
227
- await el.initialSearchComplete;
228
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
229
- expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
230
- });
231
- it('queries the search service with a metadata search', async () => {
232
- var _a, _b, _c;
233
- const searchService = new MockSearchService();
223
+ </collection-browser>`);
224
+ el.baseQuery = 'collection:foo';
225
+ await el.updateComplete;
226
+ await el.initialSearchComplete;
227
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
228
+ expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
229
+ });
230
+ it('queries the search service with a metadata search', async () => {
231
+ var _a, _b, _c;
232
+ const searchService = new MockSearchService();
234
233
  const el = await fixture(html ` <collection-browser .searchService=${searchService}>
235
- </collection-browser>`);
236
- el.searchType = SearchType.METADATA;
237
- await el.updateComplete;
238
- el.baseQuery = 'collection:foo';
239
- await el.updateComplete;
240
- await el.initialSearchComplete;
241
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
242
- expect(searchService.searchType).to.equal(SearchType.METADATA);
243
- expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
244
- });
245
- it('can change search type', async () => {
246
- const searchService = new MockSearchService();
234
+ </collection-browser>`);
235
+ el.searchType = SearchType.METADATA;
236
+ await el.updateComplete;
237
+ el.baseQuery = 'collection:foo';
238
+ await el.updateComplete;
239
+ await el.initialSearchComplete;
240
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
241
+ expect(searchService.searchType).to.equal(SearchType.METADATA);
242
+ expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
243
+ });
244
+ it('can change search type', async () => {
245
+ const searchService = new MockSearchService();
247
246
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
248
- </collection-browser>`);
249
- el.baseQuery = 'collection:foo';
250
- await el.updateComplete;
251
- el.searchType = SearchType.FULLTEXT;
252
- await el.updateComplete;
253
- await el.initialSearchComplete;
254
- expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
255
- });
256
- it('queries the search service with a fulltext search', async () => {
257
- var _a, _b, _c;
258
- const searchService = new MockSearchService();
247
+ </collection-browser>`);
248
+ el.baseQuery = 'collection:foo';
249
+ await el.updateComplete;
250
+ el.searchType = SearchType.FULLTEXT;
251
+ await el.updateComplete;
252
+ await el.initialSearchComplete;
253
+ expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
254
+ });
255
+ it('queries the search service with a fulltext search', async () => {
256
+ var _a, _b, _c;
257
+ const searchService = new MockSearchService();
259
258
  const el = await fixture(html ` <collection-browser .searchService=${searchService}>
260
- </collection-browser>`);
261
- el.searchType = SearchType.FULLTEXT;
262
- await el.updateComplete;
263
- el.baseQuery = 'collection:foo';
264
- await el.updateComplete;
265
- await nextTick();
266
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
267
- expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
268
- expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
269
- });
270
- it('queries the search service with facets selected/negated', async () => {
271
- var _a, _b;
272
- const searchService = new MockSearchService();
273
- const selectedFacets = {
274
- subject: {
275
- foo: {
276
- key: 'foo',
277
- count: 1,
278
- state: 'selected',
279
- },
280
- bar: {
281
- key: 'bar',
282
- count: 2,
283
- state: 'hidden',
284
- },
285
- },
286
- lending: {},
287
- mediatype: {},
288
- language: {
289
- en: {
290
- key: 'en',
291
- count: 1,
292
- state: 'selected',
293
- },
294
- },
295
- creator: {},
296
- collection: {},
297
- year: {},
298
- };
259
+ </collection-browser>`);
260
+ el.searchType = SearchType.FULLTEXT;
261
+ await el.updateComplete;
262
+ el.baseQuery = 'collection:foo';
263
+ await el.updateComplete;
264
+ await nextTick();
265
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
266
+ expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
267
+ expect((_c = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#big-results-label')) === null || _c === void 0 ? void 0 : _c.textContent).to.contains('Results');
268
+ });
269
+ it('queries the search service with facets selected/negated', async () => {
270
+ var _a, _b;
271
+ const searchService = new MockSearchService();
272
+ const selectedFacets = {
273
+ subject: {
274
+ foo: {
275
+ key: 'foo',
276
+ count: 1,
277
+ state: 'selected',
278
+ },
279
+ bar: {
280
+ key: 'bar',
281
+ count: 2,
282
+ state: 'hidden',
283
+ },
284
+ },
285
+ lending: {},
286
+ mediatype: {},
287
+ language: {
288
+ en: {
289
+ key: 'en',
290
+ count: 1,
291
+ state: 'selected',
292
+ },
293
+ },
294
+ creator: {},
295
+ collection: {},
296
+ year: {},
297
+ };
299
298
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
300
- </collection-browser>`);
301
- el.baseQuery = 'collection:foo';
302
- el.selectedFacets = selectedFacets;
303
- await el.updateComplete;
304
- await el.initialSearchComplete;
305
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
306
- expect((_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters).to.deep.equal({
307
- subject: {
308
- foo: 'inc',
309
- bar: 'exc',
310
- },
311
- language: {
312
- en: 'inc',
313
- },
314
- });
315
- });
316
- it('fails gracefully if no search service provided', async () => {
317
- var _a;
318
- const el = await fixture(html `<collection-browser></collection-browser>`);
319
- el.baseQuery = 'collection:foo';
320
- await el.updateComplete;
321
- // This shouldn't throw an error
322
- expect(el.dataSource.fetchPage(3)).to.exist;
323
- // Should continue showing the empty placeholder
324
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder')).to.exist;
325
- });
326
- it('restores search type from URL param', async () => {
327
- // Add a sin=TXT param to the URL
328
- const url = new URL(window.location.href);
329
- url.searchParams.append('sin', 'TXT');
330
- window.history.replaceState({}, '', url);
331
- const searchService = new MockSearchService();
299
+ </collection-browser>`);
300
+ el.baseQuery = 'collection:foo';
301
+ el.selectedFacets = selectedFacets;
302
+ await el.updateComplete;
303
+ await el.initialSearchComplete;
304
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
305
+ expect((_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters).to.deep.equal({
306
+ subject: {
307
+ foo: 'inc',
308
+ bar: 'exc',
309
+ },
310
+ language: {
311
+ en: 'inc',
312
+ },
313
+ });
314
+ });
315
+ it('fails gracefully if no search service provided', async () => {
316
+ var _a;
317
+ const el = await fixture(html `<collection-browser></collection-browser>`);
318
+ el.baseQuery = 'collection:foo';
319
+ await el.updateComplete;
320
+ // This shouldn't throw an error
321
+ expect(el.dataSource.fetchPage(3)).to.exist;
322
+ // Should continue showing the empty placeholder
323
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder')).to.exist;
324
+ });
325
+ it('restores search type from URL param', async () => {
326
+ // Add a sin=TXT param to the URL
327
+ const url = new URL(window.location.href);
328
+ url.searchParams.append('sin', 'TXT');
329
+ window.history.replaceState({}, '', url);
330
+ const searchService = new MockSearchService();
332
331
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
333
- </collection-browser>`);
334
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
335
- });
336
- it('can construct tile models with many fields present', async () => {
337
- const searchService = new MockSearchService();
332
+ </collection-browser>`);
333
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
334
+ });
335
+ it('can construct tile models with many fields present', async () => {
336
+ const searchService = new MockSearchService();
338
337
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
339
- </collection-browser>`);
340
- el.baseQuery = 'many-fields';
341
- await el.updateComplete;
342
- await el.initialSearchComplete;
343
- const cellTemplate = el.cellForIndex(0);
344
- expect(cellTemplate).to.exist;
345
- const cell = await fixture(cellTemplate);
346
- expect(cell).to.exist;
347
- });
348
- it('emits empty results event when search fetches no results', async () => {
349
- const searchService = new MockSearchService();
350
- const emptyResultsSpy = sinon.spy();
338
+ </collection-browser>`);
339
+ el.baseQuery = 'many-fields';
340
+ await el.updateComplete;
341
+ await el.initialSearchComplete;
342
+ const cellTemplate = el.cellForIndex(0);
343
+ expect(cellTemplate).to.exist;
344
+ const cell = await fixture(cellTemplate);
345
+ expect(cell).to.exist;
346
+ });
347
+ it('emits empty results event when search fetches no results', async () => {
348
+ const searchService = new MockSearchService();
349
+ const emptyResultsSpy = sinon.spy();
351
350
  const el = await fixture(html `<collection-browser
352
351
  .searchService=${searchService}
353
352
  @emptyResults=${emptyResultsSpy}
354
353
  >
355
- </collection-browser>`);
356
- el.baseQuery = 'no-results';
357
- await el.updateComplete;
358
- await el.initialSearchComplete;
359
- expect(emptyResultsSpy.callCount).to.equal(1);
360
- });
361
- it('applies loggedin flag to tile models if needed', async () => {
362
- var _a;
363
- const searchService = new MockSearchService();
354
+ </collection-browser>`);
355
+ el.baseQuery = 'no-results';
356
+ await el.updateComplete;
357
+ await el.initialSearchComplete;
358
+ expect(emptyResultsSpy.callCount).to.equal(1);
359
+ });
360
+ it('applies loggedin flag to tile models if needed', async () => {
361
+ var _a;
362
+ const searchService = new MockSearchService();
364
363
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
365
- </collection-browser>`);
366
- el.baseQuery = 'loggedin';
367
- await el.updateComplete;
368
- await el.initialSearchComplete;
369
- const cellTemplate = el.cellForIndex(0);
370
- expect(cellTemplate).to.exist;
371
- const cell = await fixture(cellTemplate);
372
- expect(cell).to.exist;
373
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
374
- });
375
- it('applies no-preview flag to tile models if needed', async () => {
376
- var _a;
377
- const searchService = new MockSearchService();
364
+ </collection-browser>`);
365
+ el.baseQuery = 'loggedin';
366
+ await el.updateComplete;
367
+ await el.initialSearchComplete;
368
+ const cellTemplate = el.cellForIndex(0);
369
+ expect(cellTemplate).to.exist;
370
+ const cell = await fixture(cellTemplate);
371
+ expect(cell).to.exist;
372
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
373
+ });
374
+ it('applies no-preview flag to tile models if needed', async () => {
375
+ var _a;
376
+ const searchService = new MockSearchService();
378
377
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
379
- </collection-browser>`);
380
- el.baseQuery = 'no-preview';
381
- await el.updateComplete;
382
- await el.initialSearchComplete;
383
- const cellTemplate = el.cellForIndex(0);
384
- expect(cellTemplate).to.exist;
385
- const cell = await fixture(cellTemplate);
386
- expect(cell).to.exist;
387
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.contentWarning).to.be.true;
388
- });
389
- it('both loggedin and no-preview flags can be set simultaneously', async () => {
390
- var _a, _b;
391
- const searchService = new MockSearchService();
378
+ </collection-browser>`);
379
+ el.baseQuery = 'no-preview';
380
+ await el.updateComplete;
381
+ await el.initialSearchComplete;
382
+ const cellTemplate = el.cellForIndex(0);
383
+ expect(cellTemplate).to.exist;
384
+ const cell = await fixture(cellTemplate);
385
+ expect(cell).to.exist;
386
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.contentWarning).to.be.true;
387
+ });
388
+ it('both loggedin and no-preview flags can be set simultaneously', async () => {
389
+ var _a, _b;
390
+ const searchService = new MockSearchService();
392
391
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
393
- </collection-browser>`);
394
- el.baseQuery = 'loggedin-no-preview';
395
- await el.updateComplete;
396
- await el.initialSearchComplete;
397
- const cellTemplate = el.cellForIndex(0);
398
- expect(cellTemplate).to.exist;
399
- const cell = await fixture(cellTemplate);
400
- expect(cell).to.exist;
401
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
402
- expect((_b = cell.model) === null || _b === void 0 ? void 0 : _b.contentWarning).to.be.true;
403
- });
404
- it('joins full description array into a single string with line breaks', async () => {
405
- var _a;
406
- const searchService = new MockSearchService();
392
+ </collection-browser>`);
393
+ el.baseQuery = 'loggedin-no-preview';
394
+ await el.updateComplete;
395
+ await el.initialSearchComplete;
396
+ const cellTemplate = el.cellForIndex(0);
397
+ expect(cellTemplate).to.exist;
398
+ const cell = await fixture(cellTemplate);
399
+ expect(cell).to.exist;
400
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.loginRequired).to.be.true;
401
+ expect((_b = cell.model) === null || _b === void 0 ? void 0 : _b.contentWarning).to.be.true;
402
+ });
403
+ it('joins full description array into a single string with line breaks', async () => {
404
+ var _a;
405
+ const searchService = new MockSearchService();
407
406
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
408
- </collection-browser>`);
409
- // This query receives an array description like ['line1', 'line2']
410
- el.baseQuery = 'multi-line-description';
411
- await el.updateComplete;
412
- await el.initialSearchComplete;
413
- const cellTemplate = el.cellForIndex(0);
414
- expect(cellTemplate).to.exist;
415
- const cell = await fixture(cellTemplate);
416
- expect(cell).to.exist;
417
- // Actual model description should be joined
418
- expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.description).to.equal('line1\nline2');
419
- });
420
- it('can change search type', async () => {
421
- var _a;
422
- const searchService = new MockSearchService();
407
+ </collection-browser>`);
408
+ // This query receives an array description like ['line1', 'line2']
409
+ el.baseQuery = 'multi-line-description';
410
+ await el.updateComplete;
411
+ await el.initialSearchComplete;
412
+ const cellTemplate = el.cellForIndex(0);
413
+ expect(cellTemplate).to.exist;
414
+ const cell = await fixture(cellTemplate);
415
+ expect(cell).to.exist;
416
+ // Actual model description should be joined
417
+ expect((_a = cell.model) === null || _a === void 0 ? void 0 : _a.description).to.equal('line1\nline2');
418
+ });
419
+ it('can change search type', async () => {
420
+ var _a;
421
+ const searchService = new MockSearchService();
423
422
  const el = await fixture(html `<collection-browser
424
423
  .searchService=${searchService}
425
424
  .searchType=${SearchType.METADATA}
426
- ></collection-browser>`);
427
- el.baseQuery = 'collection:foo';
428
- el.searchType = SearchType.FULLTEXT;
429
- await el.updateComplete;
430
- await el.initialSearchComplete;
431
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
432
- expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
433
- });
434
- it('trims queries of leading/trailing whitespace', async () => {
435
- var _a;
436
- const searchService = new MockSearchService();
425
+ ></collection-browser>`);
426
+ el.baseQuery = 'collection:foo';
427
+ el.searchType = SearchType.FULLTEXT;
428
+ await el.updateComplete;
429
+ await el.initialSearchComplete;
430
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
431
+ expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
432
+ });
433
+ it('trims queries of leading/trailing whitespace', async () => {
434
+ var _a;
435
+ const searchService = new MockSearchService();
437
436
  const el = await fixture(html `<collection-browser
438
437
  .searchService=${searchService}
439
- ></collection-browser>`);
440
- el.baseQuery = ' collection:foo ';
441
- await el.updateComplete;
442
- await el.initialSearchComplete;
443
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
444
- });
445
- it('shows error message when error response received', async () => {
446
- var _a, _b;
447
- const searchService = new MockSearchService();
438
+ ></collection-browser>`);
439
+ el.baseQuery = ' collection:foo ';
440
+ await el.updateComplete;
441
+ await el.initialSearchComplete;
442
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('collection:foo');
443
+ });
444
+ it('shows error message when error response received', async () => {
445
+ var _a, _b;
446
+ const searchService = new MockSearchService();
448
447
  const el = await fixture(html `<collection-browser
449
448
  .searchService=${searchService}
450
- ></collection-browser>`);
451
- el.baseQuery = 'error';
452
- await el.updateComplete;
453
- await el.initialSearchComplete;
454
- const errorPlaceholder = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder');
455
- const errorDetails = (_b = errorPlaceholder === null || errorPlaceholder === void 0 ? void 0 : errorPlaceholder.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.error-details');
456
- expect(errorDetails).to.exist;
457
- expect(errorDetails.textContent).to.contain('foo');
458
- });
459
- it('shows error message when error response received for a collection', async () => {
460
- var _a, _b;
461
- const searchService = new MockSearchService();
449
+ ></collection-browser>`);
450
+ el.baseQuery = 'error';
451
+ await el.updateComplete;
452
+ await el.initialSearchComplete;
453
+ const errorPlaceholder = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder');
454
+ const errorDetails = (_b = errorPlaceholder === null || errorPlaceholder === void 0 ? void 0 : errorPlaceholder.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.error-details');
455
+ expect(errorDetails).to.exist;
456
+ expect(errorDetails.textContent).to.contain('foo');
457
+ });
458
+ it('shows error message when error response received for a collection', async () => {
459
+ var _a, _b;
460
+ const searchService = new MockSearchService();
462
461
  const el = await fixture(html `<collection-browser
463
462
  .searchService=${searchService}
464
- ></collection-browser>`);
465
- el.withinCollection = 'error';
466
- await el.updateComplete;
467
- await el.initialSearchComplete;
468
- const errorPlaceholder = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder');
469
- const errorDetails = (_b = errorPlaceholder === null || errorPlaceholder === void 0 ? void 0 : errorPlaceholder.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.error-details');
470
- expect(errorDetails).to.exist;
471
- expect(errorDetails.textContent).to.contain('foo');
472
- });
473
- it('reports malformed response errors to Sentry', async () => {
474
- const sentrySpy = sinon.spy();
475
- window.Sentry = { captureMessage: sentrySpy };
476
- const searchService = new MockSearchService();
463
+ ></collection-browser>`);
464
+ el.withinCollection = 'error';
465
+ await el.updateComplete;
466
+ await el.initialSearchComplete;
467
+ const errorPlaceholder = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('empty-placeholder');
468
+ const errorDetails = (_b = errorPlaceholder === null || errorPlaceholder === void 0 ? void 0 : errorPlaceholder.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.error-details');
469
+ expect(errorDetails).to.exist;
470
+ expect(errorDetails.textContent).to.contain('foo');
471
+ });
472
+ it('reports malformed response errors to Sentry', async () => {
473
+ const sentrySpy = sinon.spy();
474
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
475
+ window.Sentry = { captureMessage: sentrySpy };
476
+ const searchService = new MockSearchService();
477
477
  const el = await fixture(html `<collection-browser
478
478
  .searchService=${searchService}
479
- ></collection-browser>`);
480
- el.baseQuery = 'malformed';
481
- await el.updateComplete;
482
- await el.initialSearchComplete;
483
- expect(sentrySpy.callCount).to.be.greaterThanOrEqual(1);
484
- });
485
- it('adds collection names to cache when present on response', async () => {
486
- const searchService = new MockSearchService();
479
+ ></collection-browser>`);
480
+ el.baseQuery = 'malformed';
481
+ await el.updateComplete;
482
+ await el.initialSearchComplete;
483
+ expect(sentrySpy.callCount).to.be.greaterThanOrEqual(1);
484
+ });
485
+ it('adds collection names to cache when present on response', async () => {
486
+ const searchService = new MockSearchService();
487
487
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
488
- </collection-browser>`);
489
- el.baseQuery = 'collection-titles';
490
- await el.updateComplete;
491
- await el.initialSearchComplete;
492
- expect(el.dataSource.collectionTitles.get('foo')).to.equal('Foo Collection');
493
- expect(el.dataSource.collectionTitles.get('bar')).to.equal('Bar Collection');
494
- expect(el.dataSource.collectionTitles.get('baz')).to.equal('Baz Collection');
495
- expect(el.dataSource.collectionTitles.get('boop')).to.equal('Boop Collection');
496
- });
497
- it('keeps search results from fetch if no change to query or sort param', async () => {
498
- const resultsSpy = sinon.spy();
499
- const searchService = new MockSearchService({
500
- asyncResponse: true,
501
- resultsSpy,
502
- });
488
+ </collection-browser>`);
489
+ el.baseQuery = 'collection-titles';
490
+ await el.updateComplete;
491
+ await el.initialSearchComplete;
492
+ expect(el.dataSource.collectionTitles.get('foo')).to.equal('Foo Collection');
493
+ expect(el.dataSource.collectionTitles.get('bar')).to.equal('Bar Collection');
494
+ expect(el.dataSource.collectionTitles.get('baz')).to.equal('Baz Collection');
495
+ expect(el.dataSource.collectionTitles.get('boop')).to.equal('Boop Collection');
496
+ });
497
+ it('keeps search results from fetch if no change to query or sort param', async () => {
498
+ const resultsSpy = sinon.spy();
499
+ const searchService = new MockSearchService({
500
+ asyncResponse: true,
501
+ resultsSpy,
502
+ });
503
503
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
504
- </collection-browser>`);
505
- el.baseQuery = 'with-sort';
506
- el.selectedSort = SortField.date;
507
- el.sortDirection = 'asc';
508
- await el.updateComplete;
509
- await el.dataSource.fetchPage(3);
510
- // If there is no change to the query or sort param during the fetch, the results
511
- // should be read.
512
- expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);
513
- });
514
- it('discards obsolete search results if sort params changed before arrival', async () => {
515
- const resultsSpy = sinon.spy();
516
- const searchService = new MockSearchService({
517
- asyncResponse: true,
518
- resultsSpy,
519
- });
504
+ </collection-browser>`);
505
+ el.baseQuery = 'with-sort';
506
+ el.selectedSort = SortField.date;
507
+ el.sortDirection = 'asc';
508
+ await el.updateComplete;
509
+ await el.dataSource.fetchPage(3);
510
+ // If there is no change to the query or sort param during the fetch, the results
511
+ // should be read.
512
+ expect(resultsSpy.callCount).to.be.greaterThanOrEqual(1);
513
+ });
514
+ it('discards obsolete search results if sort params changed before arrival', async () => {
515
+ const resultsSpy = sinon.spy();
516
+ const searchService = new MockSearchService({
517
+ asyncResponse: true,
518
+ resultsSpy,
519
+ });
520
520
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
521
- </collection-browser>`);
522
- el.baseQuery = 'with-sort';
523
- el.selectedSort = SortField.date;
524
- el.sortDirection = 'asc';
525
- await el.updateComplete;
526
- // We want to spy exclusively on the first set of results, not the second
527
- searchService.asyncResponse = false;
528
- searchService.resultsSpy = () => { };
529
- el.sortDirection = 'desc';
530
- await el.updateComplete;
531
- await el.initialSearchComplete;
532
- // If the different sort param causes the results to be discarded,
533
- // the first results array should never be read.
534
- expect(resultsSpy.callCount).to.equal(0);
535
- });
536
- it('discards obsolete search results if sort param added before arrival', async () => {
537
- const resultsSpy = sinon.spy();
538
- const searchService = new MockSearchService({
539
- asyncResponse: true,
540
- resultsSpy,
541
- });
521
+ </collection-browser>`);
522
+ el.baseQuery = 'with-sort';
523
+ el.selectedSort = SortField.date;
524
+ el.sortDirection = 'asc';
525
+ await el.updateComplete;
526
+ // We want to spy exclusively on the first set of results, not the second
527
+ searchService.asyncResponse = false;
528
+ searchService.resultsSpy = () => { };
529
+ el.sortDirection = 'desc';
530
+ await el.updateComplete;
531
+ await el.initialSearchComplete;
532
+ // If the different sort param causes the results to be discarded,
533
+ // the first results array should never be read.
534
+ expect(resultsSpy.callCount).to.equal(0);
535
+ });
536
+ it('discards obsolete search results if sort param added before arrival', async () => {
537
+ const resultsSpy = sinon.spy();
538
+ const searchService = new MockSearchService({
539
+ asyncResponse: true,
540
+ resultsSpy,
541
+ });
542
542
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
543
- </collection-browser>`);
544
- el.baseQuery = 'single-result';
545
- await el.updateComplete;
546
- // We want to spy exclusively on the first set of results, not the second
547
- searchService.asyncResponse = false;
548
- searchService.resultsSpy = () => { };
549
- el.selectedSort = SortField.date;
550
- el.sortDirection = 'asc';
551
- await el.updateComplete;
552
- await el.initialSearchComplete;
553
- // If the different sort param causes the results to be discarded,
554
- // the first results array should never be read.
555
- expect(resultsSpy.callCount).to.equal(0);
556
- });
557
- it('discards obsolete search results if sort param cleared before arrival', async () => {
558
- const resultsSpy = sinon.spy();
559
- const searchService = new MockSearchService({
560
- asyncResponse: true,
561
- resultsSpy,
562
- });
543
+ </collection-browser>`);
544
+ el.baseQuery = 'single-result';
545
+ await el.updateComplete;
546
+ // We want to spy exclusively on the first set of results, not the second
547
+ searchService.asyncResponse = false;
548
+ searchService.resultsSpy = () => { };
549
+ el.selectedSort = SortField.date;
550
+ el.sortDirection = 'asc';
551
+ await el.updateComplete;
552
+ await el.initialSearchComplete;
553
+ // If the different sort param causes the results to be discarded,
554
+ // the first results array should never be read.
555
+ expect(resultsSpy.callCount).to.equal(0);
556
+ });
557
+ it('discards obsolete search results if sort param cleared before arrival', async () => {
558
+ const resultsSpy = sinon.spy();
559
+ const searchService = new MockSearchService({
560
+ asyncResponse: true,
561
+ resultsSpy,
562
+ });
563
563
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
564
- </collection-browser>`);
565
- el.baseQuery = 'with-sort';
566
- el.selectedSort = SortField.date;
567
- el.sortDirection = 'asc';
568
- await el.updateComplete;
569
- // We want to spy exclusively on the first set of results, not the second
570
- searchService.asyncResponse = false;
571
- searchService.resultsSpy = () => { };
572
- el.selectedSort = SortField.default;
573
- await el.updateComplete;
574
- await el.initialSearchComplete;
575
- // If the different sort param causes the results to be discarded,
576
- // the first results array should never be read.
577
- expect(resultsSpy.callCount).to.equal(0);
578
- });
579
- it('sets sort properties when user changes sort', async () => {
580
- var _a, _b, _c, _d;
581
- const searchService = new MockSearchService();
564
+ </collection-browser>`);
565
+ el.baseQuery = 'with-sort';
566
+ el.selectedSort = SortField.date;
567
+ el.sortDirection = 'asc';
568
+ await el.updateComplete;
569
+ // We want to spy exclusively on the first set of results, not the second
570
+ searchService.asyncResponse = false;
571
+ searchService.resultsSpy = () => { };
572
+ el.selectedSort = SortField.default;
573
+ await el.updateComplete;
574
+ await el.initialSearchComplete;
575
+ // If the different sort param causes the results to be discarded,
576
+ // the first results array should never be read.
577
+ expect(resultsSpy.callCount).to.equal(0);
578
+ });
579
+ it('sets sort properties when user changes sort', async () => {
580
+ var _a, _b, _c, _d;
581
+ const searchService = new MockSearchService();
582
582
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
583
- </collection-browser>`);
584
- expect(el.selectedSort).to.equal(SortField.default);
585
- el.baseQuery = 'foo';
586
- await el.updateComplete;
587
- await nextTick();
588
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#content-container sort-filter-bar');
589
- const sortSelector = (_b = sortBar === null || sortBar === void 0 ? void 0 : sortBar.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#desktop-sort-selector');
590
- expect(sortSelector, 'sort bar').to.exist;
591
- // Click the title sorter
592
- (_d = (_c = [...sortSelector === null || sortSelector === void 0 ? void 0 : sortSelector.children] // tsc doesn't know children is iterable
593
- .find(child => { var _a; return ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === 'Title'; })) === null || _c === void 0 ? void 0 : _c.querySelector('button')) === null || _d === void 0 ? void 0 : _d.click();
594
- await el.updateComplete;
595
- expect(el.selectedSort).to.equal(SortField.title);
596
- });
597
- it('sets sort filter properties when user selects title filter', async () => {
598
- var _a, _b, _c, _d;
599
- const searchService = new MockSearchService();
583
+ </collection-browser>`);
584
+ expect(el.selectedSort).to.equal(SortField.default);
585
+ el.baseQuery = 'foo';
586
+ await el.updateComplete;
587
+ await nextTick();
588
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#content-container sort-filter-bar');
589
+ const sortSelector = (_b = sortBar === null || sortBar === void 0 ? void 0 : sortBar.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#desktop-sort-selector');
590
+ expect(sortSelector, 'sort bar').to.exist;
591
+ // Click the title sorter
592
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
593
+ (_d = (_c = [...sortSelector === null || sortSelector === void 0 ? void 0 : sortSelector.children] // tsc doesn't know children is iterable
594
+ .find(child => { var _a; return ((_a = child.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === 'Title'; })) === null || _c === void 0 ? void 0 : _c.querySelector('button')) === null || _d === void 0 ? void 0 : _d.click();
595
+ await el.updateComplete;
596
+ expect(el.selectedSort).to.equal(SortField.title);
597
+ });
598
+ it('sets sort filter properties when user selects title filter', async () => {
599
+ var _a, _b, _c, _d;
600
+ const searchService = new MockSearchService();
600
601
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
601
- </collection-browser>`);
602
- el.baseQuery = 'first-title';
603
- el.selectedSort = 'title';
604
- el.sortDirection = 'asc';
605
- el.selectedTitleFilter = 'X';
606
- await el.updateComplete;
607
- await el.initialSearchComplete;
608
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-title');
609
- expect((_d = (_c = (_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters) === null || _c === void 0 ? void 0 : _c.firstTitle) === null || _d === void 0 ? void 0 : _d.X).to.equal(FilterConstraint.INCLUDE);
610
- });
611
- it('sets sort filter properties when user selects creator filter', async () => {
612
- var _a, _b, _c, _d;
613
- const searchService = new MockSearchService();
602
+ </collection-browser>`);
603
+ el.baseQuery = 'first-title';
604
+ el.selectedSort = 'title';
605
+ el.sortDirection = 'asc';
606
+ el.selectedTitleFilter = 'X';
607
+ await el.updateComplete;
608
+ await el.initialSearchComplete;
609
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-title');
610
+ expect((_d = (_c = (_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters) === null || _c === void 0 ? void 0 : _c.firstTitle) === null || _d === void 0 ? void 0 : _d.X).to.equal(FilterConstraint.INCLUDE);
611
+ });
612
+ it('sets sort filter properties when user selects creator filter', async () => {
613
+ var _a, _b, _c, _d;
614
+ const searchService = new MockSearchService();
614
615
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
615
- </collection-browser>`);
616
- el.baseQuery = 'first-creator';
617
- el.selectedSort = 'creator';
618
- el.sortDirection = 'asc';
619
- el.selectedCreatorFilter = 'X';
620
- await el.updateComplete;
621
- await el.initialSearchComplete;
622
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-creator');
623
- expect((_d = (_c = (_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters) === null || _c === void 0 ? void 0 : _c.firstCreator) === null || _d === void 0 ? void 0 : _d.X).to.equal(FilterConstraint.INCLUDE);
624
- });
625
- it('sets sort filter properties simultaneous with facets and date range', async () => {
626
- var _a, _b;
627
- const searchService = new MockSearchService();
628
- const selectedFacets = {
629
- collection: { foo: { key: 'foo', state: 'selected', count: 1 } },
630
- creator: {},
631
- language: {},
632
- lending: {},
633
- mediatype: {},
634
- subject: {},
635
- year: {},
636
- };
616
+ </collection-browser>`);
617
+ el.baseQuery = 'first-creator';
618
+ el.selectedSort = 'creator';
619
+ el.sortDirection = 'asc';
620
+ el.selectedCreatorFilter = 'X';
621
+ await el.updateComplete;
622
+ await el.initialSearchComplete;
623
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-creator');
624
+ expect((_d = (_c = (_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters) === null || _c === void 0 ? void 0 : _c.firstCreator) === null || _d === void 0 ? void 0 : _d.X).to.equal(FilterConstraint.INCLUDE);
625
+ });
626
+ it('sets sort filter properties simultaneous with facets and date range', async () => {
627
+ var _a, _b;
628
+ const searchService = new MockSearchService();
629
+ const selectedFacets = {
630
+ collection: { foo: { key: 'foo', state: 'selected', count: 1 } },
631
+ creator: {},
632
+ language: {},
633
+ lending: {},
634
+ mediatype: {},
635
+ subject: {},
636
+ year: {},
637
+ };
637
638
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
638
- </collection-browser>`);
639
- el.baseQuery = 'first-creator';
640
- el.selectedSort = 'creator';
641
- el.selectedFacets = selectedFacets;
642
- el.minSelectedDate = '1950';
643
- el.maxSelectedDate = '1970';
644
- el.sortDirection = 'asc';
645
- el.selectedCreatorFilter = 'X';
646
- await el.updateComplete;
647
- await el.initialSearchComplete;
648
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-creator');
649
- expect((_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters).to.deep.equal({
650
- collection: {
651
- foo: 'inc',
652
- },
653
- year: {
654
- '1950': 'gte',
655
- '1970': 'lte',
656
- },
657
- firstCreator: {
658
- X: 'inc',
659
- },
660
- });
661
- });
662
- it('resets letter filters when query changes', async () => {
663
- var _a, _b, _c, _d, _e, _f, _g;
664
- const searchService = new MockSearchService();
639
+ </collection-browser>`);
640
+ el.baseQuery = 'first-creator';
641
+ el.selectedSort = 'creator';
642
+ el.selectedFacets = selectedFacets;
643
+ el.minSelectedDate = '1950';
644
+ el.maxSelectedDate = '1970';
645
+ el.sortDirection = 'asc';
646
+ el.selectedCreatorFilter = 'X';
647
+ await el.updateComplete;
648
+ await el.initialSearchComplete;
649
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-creator');
650
+ expect((_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters).to.deep.equal({
651
+ collection: {
652
+ foo: 'inc',
653
+ },
654
+ year: {
655
+ '1950': 'gte',
656
+ '1970': 'lte',
657
+ },
658
+ firstCreator: {
659
+ X: 'inc',
660
+ },
661
+ });
662
+ });
663
+ it('resets letter filters when query changes', async () => {
664
+ var _a, _b, _c, _d, _e, _f, _g;
665
+ const searchService = new MockSearchService();
665
666
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
666
- </collection-browser>`);
667
- el.baseQuery = 'first-creator';
668
- el.selectedSort = 'creator';
669
- el.sortDirection = 'asc';
670
- el.selectedCreatorFilter = 'X';
671
- await el.updateComplete;
672
- await nextTick();
673
- expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-creator');
674
- expect((_d = (_c = (_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters) === null || _c === void 0 ? void 0 : _c.firstCreator) === null || _d === void 0 ? void 0 : _d.X).to.equal(FilterConstraint.INCLUDE);
675
- el.baseQuery = 'collection:foo';
676
- await el.updateComplete;
677
- await nextTick();
678
- expect((_e = searchService.searchParams) === null || _e === void 0 ? void 0 : _e.query).to.equal('collection:foo');
679
- expect((_g = (_f = searchService.searchParams) === null || _f === void 0 ? void 0 : _f.filters) === null || _g === void 0 ? void 0 : _g.firstCreator).not.to.exist;
680
- });
681
- it('sets date range query when date picker selection changed', async () => {
682
- var _a, _b, _c;
683
- const searchService = new MockSearchService();
667
+ </collection-browser>`);
668
+ el.baseQuery = 'first-creator';
669
+ el.selectedSort = 'creator';
670
+ el.sortDirection = 'asc';
671
+ el.selectedCreatorFilter = 'X';
672
+ await el.updateComplete;
673
+ await nextTick();
674
+ expect((_a = searchService.searchParams) === null || _a === void 0 ? void 0 : _a.query).to.equal('first-creator');
675
+ expect((_d = (_c = (_b = searchService.searchParams) === null || _b === void 0 ? void 0 : _b.filters) === null || _c === void 0 ? void 0 : _c.firstCreator) === null || _d === void 0 ? void 0 : _d.X).to.equal(FilterConstraint.INCLUDE);
676
+ el.baseQuery = 'collection:foo';
677
+ await el.updateComplete;
678
+ await nextTick();
679
+ expect((_e = searchService.searchParams) === null || _e === void 0 ? void 0 : _e.query).to.equal('collection:foo');
680
+ expect((_g = (_f = searchService.searchParams) === null || _f === void 0 ? void 0 : _f.filters) === null || _g === void 0 ? void 0 : _g.firstCreator).not.to.exist;
681
+ });
682
+ it('sets date range query when date picker selection changed', async () => {
683
+ var _a, _b, _c;
684
+ const searchService = new MockSearchService();
684
685
  const el = await fixture(html `<collection-browser
685
686
  .searchService=${searchService}
686
687
  .suppressPlaceholders=${true}
687
688
  >
688
- </collection-browser>`);
689
- el.baseQuery = 'years'; // Includes year_histogram aggregation in response
690
- el.showHistogramDatePicker = true;
691
- await el.updateComplete;
692
- const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
693
- await (facets === null || facets === void 0 ? void 0 : facets.updateComplete);
694
- // Wait for the date picker to be rendered (which may take until the next tick)
695
- await nextTick();
696
- const histogram = (_b = facets === null || facets === void 0 ? void 0 : facets.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('histogram-date-range');
697
- expect(histogram, 'histogram exists').to.exist;
698
- // Enter a new min date into the date picker
699
- const minDateInput = (_c = histogram.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('#date-min');
700
- const pressEnterEvent = new KeyboardEvent('keyup', {
701
- key: 'Enter',
702
- });
703
- minDateInput.value = '1960';
704
- minDateInput.dispatchEvent(pressEnterEvent);
705
- // Wait for the histogram's update delay
706
- await aTimeout(histogram.updateDelay + 50);
707
- // Ensure that the histogram change propagated to the collection browser's
708
- // date query correctly.
709
- await el.updateComplete;
710
- expect(el.minSelectedDate).to.equal('1960');
711
- expect(el.maxSelectedDate).to.equal('2000');
712
- });
713
- it('emits event when loading state changes', async () => {
714
- var _a, _b, _c, _d;
715
- const spy = sinon.spy();
716
- const searchService = new MockSearchService();
689
+ </collection-browser>`);
690
+ el.baseQuery = 'years'; // Includes year_histogram aggregation in response
691
+ el.showHistogramDatePicker = true;
692
+ await el.updateComplete;
693
+ const facets = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('collection-facets');
694
+ await (facets === null || facets === void 0 ? void 0 : facets.updateComplete);
695
+ // Wait for the date picker to be rendered (which may take until the next tick)
696
+ await nextTick();
697
+ const histogram = (_b = facets === null || facets === void 0 ? void 0 : facets.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('histogram-date-range');
698
+ expect(histogram, 'histogram exists').to.exist;
699
+ // Enter a new min date into the date picker
700
+ const minDateInput = (_c = histogram.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('#date-min');
701
+ const pressEnterEvent = new KeyboardEvent('keyup', {
702
+ key: 'Enter',
703
+ });
704
+ minDateInput.value = '1960';
705
+ minDateInput.dispatchEvent(pressEnterEvent);
706
+ // Wait for the histogram's update delay
707
+ await aTimeout(histogram.updateDelay + 50);
708
+ // Ensure that the histogram change propagated to the collection browser's
709
+ // date query correctly.
710
+ await el.updateComplete;
711
+ expect(el.minSelectedDate).to.equal('1960');
712
+ expect(el.maxSelectedDate).to.equal('2000');
713
+ });
714
+ it('emits event when loading state changes', async () => {
715
+ var _a, _b, _c, _d;
716
+ const spy = sinon.spy();
717
+ const searchService = new MockSearchService();
717
718
  const el = await fixture(html `<collection-browser
718
719
  .searchService=${searchService}
719
720
  @searchResultsLoadingChanged=${spy}
720
- ></collection-browser>`);
721
- el.baseQuery = 'collection:foo';
722
- await el.updateComplete;
723
- await el.initialSearchComplete;
724
- // Should initially emit loading=true, then later emit loading=false
725
- expect(spy.callCount).to.equal(2);
726
- expect((_b = (_a = spy.firstCall.firstArg) === null || _a === void 0 ? void 0 : _a.detail) === null || _b === void 0 ? void 0 : _b.loading).to.equal(true);
727
- expect((_d = (_c = spy.secondCall.firstArg) === null || _c === void 0 ? void 0 : _c.detail) === null || _d === void 0 ? void 0 : _d.loading).to.equal(false);
728
- });
729
- it('collapses extra set of quotes around href field', async () => {
730
- var _a, _b, _c, _d;
731
- const searchService = new MockSearchService();
721
+ ></collection-browser>`);
722
+ el.baseQuery = 'collection:foo';
723
+ await el.updateComplete;
724
+ await el.initialSearchComplete;
725
+ // Should initially emit loading=true, then later emit loading=false
726
+ expect(spy.callCount).to.equal(2);
727
+ expect((_b = (_a = spy.firstCall.firstArg) === null || _a === void 0 ? void 0 : _a.detail) === null || _b === void 0 ? void 0 : _b.loading).to.equal(true);
728
+ expect((_d = (_c = spy.secondCall.firstArg) === null || _c === void 0 ? void 0 : _c.detail) === null || _d === void 0 ? void 0 : _d.loading).to.equal(false);
729
+ });
730
+ it('collapses extra set of quotes around href field', async () => {
731
+ var _a, _b, _c, _d;
732
+ const searchService = new MockSearchService();
732
733
  const el = await fixture(html `<collection-browser
733
734
  .searchService=${searchService}
734
735
  .baseNavigationUrl=${''}
735
- ></collection-browser>`);
736
- el.baseQuery = 'extra-quoted-href';
737
- await el.updateComplete;
738
- await el.initialSearchComplete;
739
- await el.updateComplete;
740
- await aTimeout(50);
741
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
742
- expect(infiniteScroller).to.exist;
743
- const firstResult = (_b = infiniteScroller.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('tile-dispatcher');
744
- expect(firstResult).to.exist;
745
- // Original href q param starts/ends with %22%22, but should be collapsed to %22 before render
746
- expect((_d = (_c = firstResult.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]')) === null || _d === void 0 ? void 0 : _d.getAttribute('href')).to.equal('/details/foo?q=%22quoted+query%22');
747
- });
748
- it('sets default sort from collection metadata', async () => {
749
- var _a;
750
- const searchService = new MockSearchService();
736
+ ></collection-browser>`);
737
+ el.baseQuery = 'extra-quoted-href';
738
+ await el.updateComplete;
739
+ await el.initialSearchComplete;
740
+ await el.updateComplete;
741
+ await aTimeout(50);
742
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
743
+ expect(infiniteScroller).to.exist;
744
+ const firstResult = (_b = infiniteScroller.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('tile-dispatcher');
745
+ expect(firstResult).to.exist;
746
+ // Original href q param starts/ends with %22%22, but should be collapsed to %22 before render
747
+ expect((_d = (_c = firstResult.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]')) === null || _d === void 0 ? void 0 : _d.getAttribute('href')).to.equal('/details/foo?q=%22quoted+query%22');
748
+ });
749
+ it('sets default sort from collection metadata', async () => {
750
+ var _a;
751
+ const searchService = new MockSearchService();
751
752
  const el = await fixture(html `<collection-browser
752
753
  .searchService=${searchService}
753
754
  .baseNavigationUrl=${''}
754
- ></collection-browser>`);
755
- el.withinCollection = 'default-sort';
756
- await el.updateComplete;
757
- await el.initialSearchComplete;
758
- await el.updateComplete;
759
- await aTimeout(50);
760
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
761
- expect(sortBar).to.exist;
762
- expect(sortBar.defaultSortField).to.equal(SortField.title);
763
- expect(sortBar.defaultSortDirection).to.equal('asc');
764
- expect(sortBar.selectedSort).to.equal(SortField.default);
765
- expect(sortBar.sortDirection).to.be.null;
766
- });
767
- it('sets default sort from collection metadata in "-field" format', async () => {
768
- var _a;
769
- const searchService = new MockSearchService();
755
+ ></collection-browser>`);
756
+ el.withinCollection = 'default-sort';
757
+ await el.updateComplete;
758
+ await el.initialSearchComplete;
759
+ await el.updateComplete;
760
+ await aTimeout(50);
761
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
762
+ expect(sortBar).to.exist;
763
+ expect(sortBar.defaultSortField).to.equal(SortField.title);
764
+ expect(sortBar.defaultSortDirection).to.equal('asc');
765
+ expect(sortBar.selectedSort).to.equal(SortField.default);
766
+ expect(sortBar.sortDirection).to.be.null;
767
+ });
768
+ it('sets default sort from collection metadata in "-field" format', async () => {
769
+ var _a;
770
+ const searchService = new MockSearchService();
770
771
  const el = await fixture(html `<collection-browser
771
772
  .searchService=${searchService}
772
773
  .baseNavigationUrl=${''}
773
- ></collection-browser>`);
774
- el.withinCollection = 'default-sort-concise';
775
- await el.updateComplete;
776
- await el.initialSearchComplete;
777
- await el.updateComplete;
778
- await aTimeout(50);
779
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
780
- expect(sortBar).to.exist;
781
- expect(sortBar.defaultSortField).to.equal(SortField.dateadded);
782
- expect(sortBar.defaultSortDirection).to.equal('desc');
783
- expect(sortBar.selectedSort).to.equal(SortField.default);
784
- expect(sortBar.sortDirection).to.be.null;
785
- });
786
- it('falls back to weekly views default sorting on profiles when tab not set', async () => {
774
+ ></collection-browser>`);
775
+ el.withinCollection = 'default-sort-concise';
776
+ await el.updateComplete;
777
+ await el.initialSearchComplete;
778
+ await el.updateComplete;
779
+ await aTimeout(50);
780
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
781
+ expect(sortBar).to.exist;
782
+ expect(sortBar.defaultSortField).to.equal(SortField.dateadded);
783
+ expect(sortBar.defaultSortDirection).to.equal('desc');
784
+ expect(sortBar.selectedSort).to.equal(SortField.default);
785
+ expect(sortBar.sortDirection).to.be.null;
786
+ });
787
+ it('falls back to weekly views default sorting on profiles when tab not set', async () => {
787
788
  const el = await fixture(html `<collection-browser
788
789
  .withinProfile=${'@foobar'}
789
- ></collection-browser>`);
790
- el.applyDefaultProfileSort();
791
- expect(el.defaultSortParam).to.deep.equal({
792
- field: 'week',
793
- direction: 'desc',
794
- });
795
- });
796
- it('uses relevance sort as default when a query is set', async () => {
797
- var _a;
798
- const searchService = new MockSearchService();
790
+ ></collection-browser>`);
791
+ el.applyDefaultProfileSort();
792
+ expect(el.defaultSortParam).to.deep.equal({
793
+ field: 'week',
794
+ direction: 'desc',
795
+ });
796
+ });
797
+ it('uses relevance sort as default when a query is set', async () => {
798
+ var _a;
799
+ const searchService = new MockSearchService();
799
800
  const el = await fixture(html `<collection-browser
800
801
  .searchService=${searchService}
801
802
  .baseNavigationUrl=${''}
802
- ></collection-browser>`);
803
- el.withinCollection = 'default-sort';
804
- el.baseQuery = 'default-sort';
805
- await el.updateComplete;
806
- await el.initialSearchComplete;
807
- await el.updateComplete;
808
- await aTimeout(50);
809
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
810
- expect(sortBar).to.exist;
811
- expect(sortBar.defaultSortField).to.equal(SortField.relevance);
812
- expect(sortBar.defaultSortDirection).to.be.null;
813
- expect(sortBar.selectedSort).to.equal(SortField.default);
814
- expect(sortBar.sortDirection).to.be.null;
815
- });
816
- it('uses date favorited sort as default when targeting fav- collection', async () => {
817
- var _a;
818
- const searchService = new MockSearchService();
803
+ ></collection-browser>`);
804
+ el.withinCollection = 'default-sort';
805
+ el.baseQuery = 'default-sort';
806
+ await el.updateComplete;
807
+ await el.initialSearchComplete;
808
+ await el.updateComplete;
809
+ await aTimeout(50);
810
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
811
+ expect(sortBar).to.exist;
812
+ expect(sortBar.defaultSortField).to.equal(SortField.relevance);
813
+ expect(sortBar.defaultSortDirection).to.be.null;
814
+ expect(sortBar.selectedSort).to.equal(SortField.default);
815
+ expect(sortBar.sortDirection).to.be.null;
816
+ });
817
+ it('uses date favorited sort as default when targeting fav- collection', async () => {
818
+ var _a;
819
+ const searchService = new MockSearchService();
819
820
  const el = await fixture(html `<collection-browser
820
821
  .searchService=${searchService}
821
822
  .baseNavigationUrl=${''}
822
- ></collection-browser>`);
823
- el.withinCollection = 'fav-sort';
824
- await el.updateComplete;
825
- await el.initialSearchComplete;
826
- await el.updateComplete;
827
- await aTimeout(50);
828
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
829
- expect(sortBar).to.exist;
830
- expect(sortBar.defaultSortField).to.equal(SortField.datefavorited);
831
- expect(sortBar.defaultSortDirection).to.equal('desc');
832
- expect(sortBar.selectedSort).to.equal(SortField.default);
833
- expect(sortBar.sortDirection).to.be.null;
834
- });
835
- it('scrolls to page', async () => {
836
- var _a;
837
- const searchService = new MockSearchService();
823
+ ></collection-browser>`);
824
+ el.withinCollection = 'fav-sort';
825
+ await el.updateComplete;
826
+ await el.initialSearchComplete;
827
+ await el.updateComplete;
828
+ await aTimeout(50);
829
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
830
+ expect(sortBar).to.exist;
831
+ expect(sortBar.defaultSortField).to.equal(SortField.datefavorited);
832
+ expect(sortBar.defaultSortDirection).to.equal('desc');
833
+ expect(sortBar.selectedSort).to.equal(SortField.default);
834
+ expect(sortBar.sortDirection).to.be.null;
835
+ });
836
+ it('scrolls to page', async () => {
837
+ var _a;
838
+ const searchService = new MockSearchService();
838
839
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
839
- </collection-browser>`);
840
- // Infinite scroller won't exist unless there's a base query.
841
- // First ensure that we don't throw errors when it doesn't exist.
842
- await el.goToPage(1);
843
- // And make sure it correctly calls scrollToCell when the
844
- // infinite scroller does exist.
845
- el.baseQuery = 'collection:foo';
846
- await el.updateComplete;
847
- await nextTick();
848
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
849
- expect(infiniteScroller).to.exist;
850
- const oldScrollToCell = infiniteScroller.scrollToCell;
851
- const spy = sinon.spy();
852
- infiniteScroller.scrollToCell = spy;
853
- await el.goToPage(1);
854
- expect(spy.callCount, 'scroll to page fires once').to.equal(1);
855
- infiniteScroller.scrollToCell = oldScrollToCell;
856
- });
857
- it('shows mobile facets in mobile view', async () => {
858
- var _a, _b;
859
- const searchService = new MockSearchService();
840
+ </collection-browser>`);
841
+ // Infinite scroller won't exist unless there's a base query.
842
+ // First ensure that we don't throw errors when it doesn't exist.
843
+ await el.goToPage(1);
844
+ // And make sure it correctly calls scrollToCell when the
845
+ // infinite scroller does exist.
846
+ el.baseQuery = 'collection:foo';
847
+ await el.updateComplete;
848
+ await nextTick();
849
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
850
+ expect(infiniteScroller).to.exist;
851
+ const oldScrollToCell = infiniteScroller.scrollToCell;
852
+ const spy = sinon.spy();
853
+ infiniteScroller.scrollToCell = spy;
854
+ await el.goToPage(1);
855
+ expect(spy.callCount, 'scroll to page fires once').to.equal(1);
856
+ infiniteScroller.scrollToCell = oldScrollToCell;
857
+ });
858
+ it('shows mobile facets in mobile view', async () => {
859
+ var _a, _b;
860
+ const searchService = new MockSearchService();
860
861
  const el = await fixture(html `<collection-browser
861
862
  .searchService=${searchService}
862
863
  .mobileBreakpoint=${9999}
863
- ></collection-browser>`);
864
- el.baseQuery = 'collection:foo';
865
- await el.updateComplete;
866
- const contentContainer = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#content-container');
867
- el.handleResize({
868
- target: contentContainer,
869
- contentRect: contentContainer.getBoundingClientRect(),
870
- borderBoxSize: [],
871
- contentBoxSize: [],
872
- devicePixelContentBoxSize: [],
873
- });
874
- await el.updateComplete;
875
- const mobileFacets = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#mobile-filter-collapse');
876
- expect(mobileFacets).to.exist;
877
- });
878
- it('fires analytics when mobile facets toggled', async () => {
879
- var _a, _b;
880
- const searchService = new MockSearchService();
881
- const analyticsHandler = new MockAnalyticsHandler();
864
+ ></collection-browser>`);
865
+ el.baseQuery = 'collection:foo';
866
+ await el.updateComplete;
867
+ const contentContainer = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#content-container');
868
+ el.handleResize({
869
+ target: contentContainer,
870
+ contentRect: contentContainer.getBoundingClientRect(),
871
+ borderBoxSize: [],
872
+ contentBoxSize: [],
873
+ devicePixelContentBoxSize: [],
874
+ });
875
+ await el.updateComplete;
876
+ const mobileFacets = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#mobile-filter-collapse');
877
+ expect(mobileFacets).to.exist;
878
+ });
879
+ it('fires analytics when mobile facets toggled', async () => {
880
+ var _a, _b;
881
+ const searchService = new MockSearchService();
882
+ const analyticsHandler = new MockAnalyticsHandler();
882
883
  const el = await fixture(html `<collection-browser
883
884
  .searchService=${searchService}
884
885
  .analyticsHandler=${analyticsHandler}
885
886
  .searchContext=${'foobar-context'}
886
887
  .mobileBreakpoint=${9999}
887
- ></collection-browser>`);
888
- el.baseQuery = 'collection:foo';
889
- await el.updateComplete;
890
- const contentContainer = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#content-container');
891
- el.handleResize({
892
- target: contentContainer,
893
- contentRect: contentContainer.getBoundingClientRect(),
894
- borderBoxSize: [],
895
- contentBoxSize: [],
896
- devicePixelContentBoxSize: [],
897
- });
898
- await el.updateComplete;
899
- const mobileFacets = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#mobile-filter-collapse');
900
- expect(mobileFacets).to.exist;
901
- // We set up a Promise to wait for the 'toggle' event on the collapser,
902
- // which is what triggers the analytics.
903
- let facetsToggled = new Promise(resolve => {
904
- mobileFacets.addEventListener('toggle', resolve);
905
- });
906
- // Open the mobile facets accordion & check analytics
907
- const mobileFacetsHeader = mobileFacets.querySelector('summary');
908
- expect(mobileFacetsHeader).to.exist;
909
- mobileFacetsHeader.click();
910
- await facetsToggled;
911
- expect(analyticsHandler.callCategory).to.equal('foobar-context');
912
- expect(analyticsHandler.callAction).to.equal(analyticsActions.mobileFacetsToggled);
913
- expect(analyticsHandler.callLabel).to.equal('open');
914
- // Close the mobile facets accordion & check analytics
915
- facetsToggled = new Promise(resolve => {
916
- mobileFacets.addEventListener('toggle', resolve);
917
- });
918
- mobileFacetsHeader.click();
919
- await facetsToggled;
920
- expect(analyticsHandler.callCategory).to.equal('foobar-context');
921
- expect(analyticsHandler.callAction).to.equal(analyticsActions.mobileFacetsToggled);
922
- expect(analyticsHandler.callLabel).to.equal('closed');
923
- });
924
- it('sets parent collections to prop when searching a collection', async () => {
925
- const searchService = new MockSearchService();
888
+ ></collection-browser>`);
889
+ el.baseQuery = 'collection:foo';
890
+ await el.updateComplete;
891
+ const contentContainer = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#content-container');
892
+ el.handleResize({
893
+ target: contentContainer,
894
+ contentRect: contentContainer.getBoundingClientRect(),
895
+ borderBoxSize: [],
896
+ contentBoxSize: [],
897
+ devicePixelContentBoxSize: [],
898
+ });
899
+ await el.updateComplete;
900
+ const mobileFacets = (_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('#mobile-filter-collapse');
901
+ expect(mobileFacets).to.exist;
902
+ // We set up a Promise to wait for the 'toggle' event on the collapser,
903
+ // which is what triggers the analytics.
904
+ let facetsToggled = new Promise(resolve => {
905
+ mobileFacets.addEventListener('toggle', resolve);
906
+ });
907
+ // Open the mobile facets accordion & check analytics
908
+ const mobileFacetsHeader = mobileFacets.querySelector('summary');
909
+ expect(mobileFacetsHeader).to.exist;
910
+ mobileFacetsHeader.click();
911
+ await facetsToggled;
912
+ expect(analyticsHandler.callCategory).to.equal('foobar-context');
913
+ expect(analyticsHandler.callAction).to.equal(analyticsActions.mobileFacetsToggled);
914
+ expect(analyticsHandler.callLabel).to.equal('open');
915
+ // Close the mobile facets accordion & check analytics
916
+ facetsToggled = new Promise(resolve => {
917
+ mobileFacets.addEventListener('toggle', resolve);
918
+ });
919
+ mobileFacetsHeader.click();
920
+ await facetsToggled;
921
+ expect(analyticsHandler.callCategory).to.equal('foobar-context');
922
+ expect(analyticsHandler.callAction).to.equal(analyticsActions.mobileFacetsToggled);
923
+ expect(analyticsHandler.callLabel).to.equal('closed');
924
+ });
925
+ it('sets parent collections to prop when searching a collection', async () => {
926
+ const searchService = new MockSearchService();
926
927
  const el = await fixture(html `<collection-browser
927
928
  .searchService=${searchService}
928
929
  .withinCollection=${'fake'}
929
- ></collection-browser>`);
930
- el.baseQuery = 'parent-collections';
931
- await el.updateComplete;
932
- await el.initialSearchComplete;
933
- await aTimeout(0);
934
- expect(el.dataSource.parentCollections).to.deep.equal(['foo', 'bar']);
935
- });
936
- it('refreshes when certain properties change - with some analytics event sampling', async () => {
937
- var _a;
938
- const mockAnalyticsHandler = new MockAnalyticsHandler();
939
- const searchService = new MockSearchService();
930
+ ></collection-browser>`);
931
+ el.baseQuery = 'parent-collections';
932
+ await el.updateComplete;
933
+ await el.initialSearchComplete;
934
+ await aTimeout(0);
935
+ expect(el.dataSource.parentCollections).to.deep.equal(['foo', 'bar']);
936
+ });
937
+ it('refreshes when certain properties change - with some analytics event sampling', async () => {
938
+ var _a;
939
+ const mockAnalyticsHandler = new MockAnalyticsHandler();
940
+ const searchService = new MockSearchService();
940
941
  const el = await fixture(html `<collection-browser
941
942
  .analyticsHandler=${mockAnalyticsHandler}
942
943
  .searchService=${searchService}
943
- ></collection-browser>`);
944
- const infiniteScrollerRefreshSpy = sinon.spy();
945
- // Infinite scroller won't exist unless there's a base query
946
- el.baseQuery = 'collection:foo';
947
- await el.updateComplete;
948
- await nextTick();
949
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
950
- infiniteScroller.reload = infiniteScrollerRefreshSpy;
951
- expect(infiniteScrollerRefreshSpy.called).to.be.false;
952
- expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
953
- // testing: `loggedIn`
954
- el.loggedIn = true;
955
- await el.updateComplete;
956
- expect(infiniteScrollerRefreshSpy.called, 'Infinite Scroller Refresh').to.be
957
- .true;
958
- expect(infiniteScrollerRefreshSpy.callCount, 'Infinite Scroller Refresh call count').to.equal(1);
959
- el.loggedIn = false;
960
- await el.updateComplete;
961
- expect(infiniteScrollerRefreshSpy.callCount, '2nd Infinite Scroller Refresh').to.equal(2);
962
- // testing: `displayMode`
963
- el.displayMode = 'list-compact';
964
- el.searchContext = 'beta-search';
965
- await el.updateComplete;
966
- expect(infiniteScrollerRefreshSpy.callCount, '3rd Infinite Scroller Refresh').to.equal(3);
967
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
968
- expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
969
- expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');
970
- el.displayMode = 'list-detail';
971
- await el.updateComplete;
972
- expect(infiniteScrollerRefreshSpy.callCount, '4th Infinite Scroller Refresh').to.equal(4);
973
- expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
974
- expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
975
- expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');
976
- // testing: `baseNavigationUrl`
977
- el.baseNavigationUrl = 'https://funtestsite.com';
978
- await el.updateComplete;
979
- expect(infiniteScrollerRefreshSpy.callCount, '5th Infinite Scroller Refresh').to.equal(5);
980
- // testing: `baseImageUrl`
981
- el.baseImageUrl = 'https://funtestsiteforimages.com';
982
- await el.updateComplete;
983
- expect(infiniteScrollerRefreshSpy.callCount, '6th Infinite Scroller Refresh').to.equal(6);
984
- });
985
- it('query the search service for single result', async () => {
986
- var _a, _b;
987
- const searchService = new MockSearchService();
944
+ ></collection-browser>`);
945
+ const infiniteScrollerRefreshSpy = sinon.spy();
946
+ // Infinite scroller won't exist unless there's a base query
947
+ el.baseQuery = 'collection:foo';
948
+ await el.updateComplete;
949
+ await nextTick();
950
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
951
+ infiniteScroller.reload = infiniteScrollerRefreshSpy;
952
+ expect(infiniteScrollerRefreshSpy.called).to.be.false;
953
+ expect(infiniteScrollerRefreshSpy.callCount).to.equal(0);
954
+ // testing: `loggedIn`
955
+ el.loggedIn = true;
956
+ await el.updateComplete;
957
+ expect(infiniteScrollerRefreshSpy.called, 'Infinite Scroller Refresh').to.be
958
+ .true;
959
+ expect(infiniteScrollerRefreshSpy.callCount, 'Infinite Scroller Refresh call count').to.equal(1);
960
+ el.loggedIn = false;
961
+ await el.updateComplete;
962
+ expect(infiniteScrollerRefreshSpy.callCount, '2nd Infinite Scroller Refresh').to.equal(2);
963
+ // testing: `displayMode`
964
+ el.displayMode = 'list-compact';
965
+ el.searchContext = 'beta-search';
966
+ await el.updateComplete;
967
+ expect(infiniteScrollerRefreshSpy.callCount, '3rd Infinite Scroller Refresh').to.equal(3);
968
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
969
+ expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
970
+ expect(mockAnalyticsHandler.callLabel).to.equal('list-compact');
971
+ el.displayMode = 'list-detail';
972
+ await el.updateComplete;
973
+ expect(infiniteScrollerRefreshSpy.callCount, '4th Infinite Scroller Refresh').to.equal(4);
974
+ expect(mockAnalyticsHandler.callCategory).to.equal('beta-search');
975
+ expect(mockAnalyticsHandler.callAction).to.equal('displayMode');
976
+ expect(mockAnalyticsHandler.callLabel).to.equal('list-detail');
977
+ // testing: `baseNavigationUrl`
978
+ el.baseNavigationUrl = 'https://funtestsite.com';
979
+ await el.updateComplete;
980
+ expect(infiniteScrollerRefreshSpy.callCount, '5th Infinite Scroller Refresh').to.equal(5);
981
+ // testing: `baseImageUrl`
982
+ el.baseImageUrl = 'https://funtestsiteforimages.com';
983
+ await el.updateComplete;
984
+ expect(infiniteScrollerRefreshSpy.callCount, '6th Infinite Scroller Refresh').to.equal(6);
985
+ });
986
+ it('query the search service for single result', async () => {
987
+ var _a, _b;
988
+ const searchService = new MockSearchService();
988
989
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
989
- </collection-browser>`);
990
- el.baseQuery = 'single-result';
991
- await el.updateComplete;
992
- await el.initialSearchComplete;
993
- expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#big-results-label')) === null || _b === void 0 ? void 0 : _b.textContent).to.contains('Result');
994
- });
995
- it('`searchContext` prop helps describe where component is being used', async () => {
996
- const el = await fixture(html `<collection-browser></collection-browser>`);
997
- expect(el.searchContext).to.equal(analyticsCategories.default);
998
- el.searchContext = 'unicorn-search';
999
- await el.updateComplete;
1000
- expect(el.searchContext).to.equal('unicorn-search');
1001
- // property is reflected as attribute
1002
- expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');
1003
- });
1004
- it('respects the initial set of URL parameters for a general search', async () => {
1005
- var _a, _b, _c, _d, _e, _f;
1006
- const url = new URL(window.location.href);
1007
- const { searchParams } = url;
1008
- searchParams.set('query', 'foo');
1009
- searchParams.set('sin', 'TXT');
1010
- searchParams.set('sort', 'title');
1011
- searchParams.append('not[]', 'mediatype:"data"');
1012
- searchParams.append('and[]', 'subject:"baz"');
1013
- searchParams.append('and[]', 'firstTitle:X');
1014
- searchParams.append('and[]', 'year:[2000 TO 2010]');
1015
- window.history.replaceState({}, '', url);
1016
- const searchService = new MockSearchService();
990
+ </collection-browser>`);
991
+ el.baseQuery = 'single-result';
992
+ await el.updateComplete;
993
+ await el.initialSearchComplete;
994
+ expect((_b = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#big-results-label')) === null || _b === void 0 ? void 0 : _b.textContent).to.contains('Result');
995
+ });
996
+ it('`searchContext` prop helps describe where component is being used', async () => {
997
+ const el = await fixture(html `<collection-browser></collection-browser>`);
998
+ expect(el.searchContext).to.equal(analyticsCategories.default);
999
+ el.searchContext = 'unicorn-search';
1000
+ await el.updateComplete;
1001
+ expect(el.searchContext).to.equal('unicorn-search');
1002
+ // property is reflected as attribute
1003
+ expect(el.getAttribute('searchcontext')).to.equal('unicorn-search');
1004
+ });
1005
+ it('respects the initial set of URL parameters for a general search', async () => {
1006
+ var _a, _b, _c, _d, _e, _f;
1007
+ const url = new URL(window.location.href);
1008
+ const { searchParams } = url;
1009
+ searchParams.set('query', 'foo');
1010
+ searchParams.set('sin', 'TXT');
1011
+ searchParams.set('sort', 'title');
1012
+ searchParams.append('not[]', 'mediatype:"data"');
1013
+ searchParams.append('and[]', 'subject:"baz"');
1014
+ searchParams.append('and[]', 'firstTitle:X');
1015
+ searchParams.append('and[]', 'year:[2000 TO 2010]');
1016
+ window.history.replaceState({}, '', url);
1017
+ const searchService = new MockSearchService();
1017
1018
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
1018
- </collection-browser>`);
1019
- await el.initialSearchComplete;
1020
- await el.updateComplete;
1021
- expect(el.baseQuery).to.equal('foo');
1022
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
1023
- expect(el.selectedSort).to.equal(SortField.title);
1024
- expect((_c = (_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
1025
- expect((_f = (_e = (_d = el.selectedFacets) === null || _d === void 0 ? void 0 : _d.subject) === null || _e === void 0 ? void 0 : _e.baz) === null || _f === void 0 ? void 0 : _f.state).to.equal('selected');
1026
- expect(el.selectedTitleFilter).to.equal('X');
1027
- expect(el.minSelectedDate).to.equal('2000');
1028
- expect(el.maxSelectedDate).to.equal('2010');
1029
- });
1030
- it('respects the initial set of URL parameters within a collection', async () => {
1031
- var _a, _b, _c, _d, _e, _f;
1032
- const url = new URL(window.location.href);
1033
- const { searchParams } = url;
1034
- searchParams.set('query', 'foo');
1035
- searchParams.set('sin', 'TXT');
1036
- searchParams.set('sort', 'title');
1037
- searchParams.append('not[]', 'mediatype:"data"');
1038
- searchParams.append('and[]', 'subject:"baz"');
1039
- searchParams.append('and[]', 'firstTitle:X');
1040
- searchParams.append('and[]', 'year:[2000 TO 2010]');
1041
- window.history.replaceState({}, '', url);
1042
- const searchService = new MockSearchService();
1019
+ </collection-browser>`);
1020
+ await el.initialSearchComplete;
1021
+ await el.updateComplete;
1022
+ expect(el.baseQuery).to.equal('foo');
1023
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
1024
+ expect(el.selectedSort).to.equal(SortField.title);
1025
+ expect((_c = (_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
1026
+ expect((_f = (_e = (_d = el.selectedFacets) === null || _d === void 0 ? void 0 : _d.subject) === null || _e === void 0 ? void 0 : _e.baz) === null || _f === void 0 ? void 0 : _f.state).to.equal('selected');
1027
+ expect(el.selectedTitleFilter).to.equal('X');
1028
+ expect(el.minSelectedDate).to.equal('2000');
1029
+ expect(el.maxSelectedDate).to.equal('2010');
1030
+ });
1031
+ it('respects the initial set of URL parameters within a collection', async () => {
1032
+ var _a, _b, _c, _d, _e, _f;
1033
+ const url = new URL(window.location.href);
1034
+ const { searchParams } = url;
1035
+ searchParams.set('query', 'foo');
1036
+ searchParams.set('sin', 'TXT');
1037
+ searchParams.set('sort', 'title');
1038
+ searchParams.append('not[]', 'mediatype:"data"');
1039
+ searchParams.append('and[]', 'subject:"baz"');
1040
+ searchParams.append('and[]', 'firstTitle:X');
1041
+ searchParams.append('and[]', 'year:[2000 TO 2010]');
1042
+ window.history.replaceState({}, '', url);
1043
+ const searchService = new MockSearchService();
1043
1044
  const el = await fixture(html `<collection-browser
1044
1045
  .searchService=${searchService}
1045
1046
  .withinCollection=${'foobar'}
1046
1047
  >
1047
- </collection-browser>`);
1048
- await el.initialSearchComplete;
1049
- await el.updateComplete;
1050
- expect(el.withinCollection).to.equal('foobar');
1051
- expect(el.baseQuery).to.equal('foo');
1052
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
1053
- expect(el.selectedSort).to.equal(SortField.title);
1054
- expect((_c = (_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
1055
- expect((_f = (_e = (_d = el.selectedFacets) === null || _d === void 0 ? void 0 : _d.subject) === null || _e === void 0 ? void 0 : _e.baz) === null || _f === void 0 ? void 0 : _f.state).to.equal('selected');
1056
- expect(el.selectedTitleFilter).to.equal('X');
1057
- expect(el.minSelectedDate).to.equal('2000');
1058
- expect(el.maxSelectedDate).to.equal('2010');
1059
- });
1060
- it('respects the initial set of URL parameters within a profile page', async () => {
1061
- var _a, _b, _c, _d, _e, _f;
1062
- const url = new URL(window.location.href);
1063
- const { searchParams } = url;
1064
- searchParams.set('query', 'foo');
1065
- searchParams.append('not[]', 'mediatype:"data"');
1066
- searchParams.append('and[]', 'subject:"baz"');
1067
- searchParams.append('and[]', 'firstTitle:X');
1068
- searchParams.append('and[]', 'year:[2000 TO 2010]');
1069
- window.history.replaceState({}, '', url);
1070
- const searchService = new MockSearchService();
1048
+ </collection-browser>`);
1049
+ await el.initialSearchComplete;
1050
+ await el.updateComplete;
1051
+ expect(el.withinCollection).to.equal('foobar');
1052
+ expect(el.baseQuery).to.equal('foo');
1053
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
1054
+ expect(el.selectedSort).to.equal(SortField.title);
1055
+ expect((_c = (_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
1056
+ expect((_f = (_e = (_d = el.selectedFacets) === null || _d === void 0 ? void 0 : _d.subject) === null || _e === void 0 ? void 0 : _e.baz) === null || _f === void 0 ? void 0 : _f.state).to.equal('selected');
1057
+ expect(el.selectedTitleFilter).to.equal('X');
1058
+ expect(el.minSelectedDate).to.equal('2000');
1059
+ expect(el.maxSelectedDate).to.equal('2010');
1060
+ });
1061
+ it('respects the initial set of URL parameters within a profile page', async () => {
1062
+ var _a, _b, _c, _d, _e, _f;
1063
+ const url = new URL(window.location.href);
1064
+ const { searchParams } = url;
1065
+ searchParams.set('query', 'foo');
1066
+ searchParams.append('not[]', 'mediatype:"data"');
1067
+ searchParams.append('and[]', 'subject:"baz"');
1068
+ searchParams.append('and[]', 'firstTitle:X');
1069
+ searchParams.append('and[]', 'year:[2000 TO 2010]');
1070
+ window.history.replaceState({}, '', url);
1071
+ const searchService = new MockSearchService();
1071
1072
  const el = await fixture(html `<collection-browser
1072
1073
  .searchService=${searchService}
1073
1074
  .withinProfile=${'@foobar'}
1074
1075
  .profileElement=${'uploads'}
1075
1076
  >
1076
- </collection-browser>`);
1077
- await el.initialSearchComplete;
1078
- await el.updateComplete;
1079
- expect(el.withinProfile).to.equal('@foobar');
1080
- expect(el.profileElement).to.equal('uploads');
1081
- expect(el.baseQuery).to.equal('foo');
1082
- expect(el.searchType).to.equal(SearchType.METADATA);
1083
- expect((_c = (_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
1084
- expect((_f = (_e = (_d = el.selectedFacets) === null || _d === void 0 ? void 0 : _d.subject) === null || _e === void 0 ? void 0 : _e.baz) === null || _f === void 0 ? void 0 : _f.state).to.equal('selected');
1085
- expect(el.selectedTitleFilter).to.equal('X');
1086
- expect(el.minSelectedDate).to.equal('2000');
1087
- expect(el.maxSelectedDate).to.equal('2010');
1088
- });
1089
- it('clears filters except sort when query changes for a general search', async () => {
1090
- var _a, _b, _c, _d;
1091
- const url = new URL(window.location.href);
1092
- const { searchParams } = url;
1093
- searchParams.set('query', 'foo');
1094
- searchParams.set('sin', 'TXT');
1095
- searchParams.set('sort', 'title');
1096
- searchParams.append('not[]', 'mediatype:"data"');
1097
- searchParams.append('and[]', 'subject:"baz"');
1098
- searchParams.append('and[]', 'firstTitle:X');
1099
- searchParams.append('and[]', 'year:[2000 TO 2010]');
1100
- window.history.replaceState({}, '', url);
1101
- const searchService = new MockSearchService();
1077
+ </collection-browser>`);
1078
+ await el.initialSearchComplete;
1079
+ await el.updateComplete;
1080
+ expect(el.withinProfile).to.equal('@foobar');
1081
+ expect(el.profileElement).to.equal('uploads');
1082
+ expect(el.baseQuery).to.equal('foo');
1083
+ expect(el.searchType).to.equal(SearchType.METADATA);
1084
+ expect((_c = (_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.state).to.equal('hidden');
1085
+ expect((_f = (_e = (_d = el.selectedFacets) === null || _d === void 0 ? void 0 : _d.subject) === null || _e === void 0 ? void 0 : _e.baz) === null || _f === void 0 ? void 0 : _f.state).to.equal('selected');
1086
+ expect(el.selectedTitleFilter).to.equal('X');
1087
+ expect(el.minSelectedDate).to.equal('2000');
1088
+ expect(el.maxSelectedDate).to.equal('2010');
1089
+ });
1090
+ it('clears filters except sort when query changes for a general search', async () => {
1091
+ var _a, _b, _c, _d;
1092
+ const url = new URL(window.location.href);
1093
+ const { searchParams } = url;
1094
+ searchParams.set('query', 'foo');
1095
+ searchParams.set('sin', 'TXT');
1096
+ searchParams.set('sort', 'title');
1097
+ searchParams.append('not[]', 'mediatype:"data"');
1098
+ searchParams.append('and[]', 'subject:"baz"');
1099
+ searchParams.append('and[]', 'firstTitle:X');
1100
+ searchParams.append('and[]', 'year:[2000 TO 2010]');
1101
+ window.history.replaceState({}, '', url);
1102
+ const searchService = new MockSearchService();
1102
1103
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
1103
- </collection-browser>`);
1104
- await el.initialSearchComplete;
1105
- await el.updateComplete;
1106
- el.baseQuery = 'bar';
1107
- await el.updateComplete;
1108
- expect(el.baseQuery).to.equal('bar');
1109
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
1110
- expect(el.selectedSort).to.equal(SortField.title);
1111
- expect((_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data).not.to.exist;
1112
- expect((_d = (_c = el.selectedFacets) === null || _c === void 0 ? void 0 : _c.subject) === null || _d === void 0 ? void 0 : _d.baz).not.to.exist;
1113
- expect(el.selectedTitleFilter).not.to.exist;
1114
- expect(el.minSelectedDate).not.to.exist;
1115
- expect(el.maxSelectedDate).not.to.exist;
1116
- });
1117
- it('clears filters except sort when query changes within a collection', async () => {
1118
- var _a, _b, _c, _d;
1119
- const url = new URL(window.location.href);
1120
- const { searchParams } = url;
1121
- searchParams.set('query', 'foo');
1122
- searchParams.set('sin', 'TXT');
1123
- searchParams.set('sort', 'title');
1124
- searchParams.append('not[]', 'mediatype:"data"');
1125
- searchParams.append('and[]', 'subject:"baz"');
1126
- searchParams.append('and[]', 'firstTitle:X');
1127
- searchParams.append('and[]', 'year:[2000 TO 2010]');
1128
- window.history.replaceState({}, '', url);
1129
- const searchService = new MockSearchService();
1104
+ </collection-browser>`);
1105
+ await el.initialSearchComplete;
1106
+ await el.updateComplete;
1107
+ el.baseQuery = 'bar';
1108
+ await el.updateComplete;
1109
+ expect(el.baseQuery).to.equal('bar');
1110
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
1111
+ expect(el.selectedSort).to.equal(SortField.title);
1112
+ expect((_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data).not.to.exist;
1113
+ expect((_d = (_c = el.selectedFacets) === null || _c === void 0 ? void 0 : _c.subject) === null || _d === void 0 ? void 0 : _d.baz).not.to.exist;
1114
+ expect(el.selectedTitleFilter).not.to.exist;
1115
+ expect(el.minSelectedDate).not.to.exist;
1116
+ expect(el.maxSelectedDate).not.to.exist;
1117
+ });
1118
+ it('clears filters except sort when query changes within a collection', async () => {
1119
+ var _a, _b, _c, _d;
1120
+ const url = new URL(window.location.href);
1121
+ const { searchParams } = url;
1122
+ searchParams.set('query', 'foo');
1123
+ searchParams.set('sin', 'TXT');
1124
+ searchParams.set('sort', 'title');
1125
+ searchParams.append('not[]', 'mediatype:"data"');
1126
+ searchParams.append('and[]', 'subject:"baz"');
1127
+ searchParams.append('and[]', 'firstTitle:X');
1128
+ searchParams.append('and[]', 'year:[2000 TO 2010]');
1129
+ window.history.replaceState({}, '', url);
1130
+ const searchService = new MockSearchService();
1130
1131
  const el = await fixture(html `<collection-browser
1131
1132
  .searchService=${searchService}
1132
1133
  .withinCollection=${'foobar'}
1133
1134
  >
1134
- </collection-browser>`);
1135
- el.baseQuery = 'bar';
1136
- await el.updateComplete;
1137
- expect(el.withinCollection).to.equal('foobar');
1138
- expect(el.baseQuery).to.equal('bar');
1139
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
1140
- expect(el.selectedSort).to.equal(SortField.title);
1141
- expect((_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data).not.to.exist;
1142
- expect((_d = (_c = el.selectedFacets) === null || _c === void 0 ? void 0 : _c.subject) === null || _d === void 0 ? void 0 : _d.baz).not.to.exist;
1143
- expect(el.selectedTitleFilter).not.to.exist;
1144
- expect(el.minSelectedDate).not.to.exist;
1145
- expect(el.maxSelectedDate).not.to.exist;
1146
- });
1147
- it('clears filters *including* sort when target collection changes', async () => {
1148
- var _a, _b, _c, _d;
1149
- const url = new URL(window.location.href);
1150
- const { searchParams } = url;
1151
- searchParams.set('query', 'foo');
1152
- searchParams.set('sin', 'TXT');
1153
- searchParams.set('sort', 'title');
1154
- searchParams.append('not[]', 'mediatype:"data"');
1155
- searchParams.append('and[]', 'subject:"baz"');
1156
- searchParams.append('and[]', 'firstTitle:X');
1157
- searchParams.append('and[]', 'year:[2000 TO 2010]');
1158
- window.history.replaceState({}, '', url);
1159
- const searchService = new MockSearchService();
1135
+ </collection-browser>`);
1136
+ el.baseQuery = 'bar';
1137
+ await el.updateComplete;
1138
+ expect(el.withinCollection).to.equal('foobar');
1139
+ expect(el.baseQuery).to.equal('bar');
1140
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
1141
+ expect(el.selectedSort).to.equal(SortField.title);
1142
+ expect((_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data).not.to.exist;
1143
+ expect((_d = (_c = el.selectedFacets) === null || _c === void 0 ? void 0 : _c.subject) === null || _d === void 0 ? void 0 : _d.baz).not.to.exist;
1144
+ expect(el.selectedTitleFilter).not.to.exist;
1145
+ expect(el.minSelectedDate).not.to.exist;
1146
+ expect(el.maxSelectedDate).not.to.exist;
1147
+ });
1148
+ it('clears filters *including* sort when target collection changes', async () => {
1149
+ var _a, _b, _c, _d;
1150
+ const url = new URL(window.location.href);
1151
+ const { searchParams } = url;
1152
+ searchParams.set('query', 'foo');
1153
+ searchParams.set('sin', 'TXT');
1154
+ searchParams.set('sort', 'title');
1155
+ searchParams.append('not[]', 'mediatype:"data"');
1156
+ searchParams.append('and[]', 'subject:"baz"');
1157
+ searchParams.append('and[]', 'firstTitle:X');
1158
+ searchParams.append('and[]', 'year:[2000 TO 2010]');
1159
+ window.history.replaceState({}, '', url);
1160
+ const searchService = new MockSearchService();
1160
1161
  const el = await fixture(html `<collection-browser
1161
1162
  .searchService=${searchService}
1162
1163
  .withinCollection=${'foobar'}
1163
1164
  >
1164
- </collection-browser>`);
1165
- el.withinCollection = 'bar';
1166
- await el.updateComplete;
1167
- expect(el.withinCollection).to.equal('bar');
1168
- expect(el.baseQuery).to.equal('foo');
1169
- expect(el.searchType).to.equal(SearchType.FULLTEXT);
1170
- expect(el.selectedSort).to.equal(SortField.default);
1171
- expect((_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data).not.to.exist;
1172
- expect((_d = (_c = el.selectedFacets) === null || _c === void 0 ? void 0 : _c.subject) === null || _d === void 0 ? void 0 : _d.baz).not.to.exist;
1173
- expect(el.selectedTitleFilter).not.to.exist;
1174
- expect(el.minSelectedDate).not.to.exist;
1175
- expect(el.maxSelectedDate).not.to.exist;
1176
- });
1177
- it('correctly retrieves web archive hits', async () => {
1178
- var _a, _b, _c;
1179
- const searchService = new MockSearchService();
1165
+ </collection-browser>`);
1166
+ el.withinCollection = 'bar';
1167
+ await el.updateComplete;
1168
+ expect(el.withinCollection).to.equal('bar');
1169
+ expect(el.baseQuery).to.equal('foo');
1170
+ expect(el.searchType).to.equal(SearchType.FULLTEXT);
1171
+ expect(el.selectedSort).to.equal(SortField.default);
1172
+ expect((_b = (_a = el.selectedFacets) === null || _a === void 0 ? void 0 : _a.mediatype) === null || _b === void 0 ? void 0 : _b.data).not.to.exist;
1173
+ expect((_d = (_c = el.selectedFacets) === null || _c === void 0 ? void 0 : _c.subject) === null || _d === void 0 ? void 0 : _d.baz).not.to.exist;
1174
+ expect(el.selectedTitleFilter).not.to.exist;
1175
+ expect(el.minSelectedDate).not.to.exist;
1176
+ expect(el.maxSelectedDate).not.to.exist;
1177
+ });
1178
+ it('correctly retrieves web archive hits', async () => {
1179
+ var _a, _b, _c;
1180
+ const searchService = new MockSearchService();
1180
1181
  const el = await fixture(html `<collection-browser
1181
1182
  .searchService=${searchService}
1182
1183
  .withinProfile=${'@foo'}
1183
1184
  .profileElement=${'web_archives'}
1184
1185
  >
1185
- </collection-browser>`);
1186
- el.baseQuery = 'web-archive';
1187
- await el.updateComplete;
1188
- await el.initialSearchComplete;
1189
- await nextTick();
1190
- console.log('\n\n*****\n\n*****\n\n', el.dataSource.getAllPages(), '\n\n*****\n\n*****\n\n');
1191
- expect(el.dataSource.totalResults, 'total results').to.equal(1);
1192
- expect((_a = el.dataSource.getTileModelAt(0)) === null || _a === void 0 ? void 0 : _a.title).to.equal('https://example.com');
1193
- expect((_c = (_b = el.dataSource.getTileModelAt(0)) === null || _b === void 0 ? void 0 : _b.captureDates) === null || _c === void 0 ? void 0 : _c.length, 'capture dates').to.equal(1);
1194
- });
1195
- it('shows dropdown accordion in facet sidebar when opt-in strategy is specified', async () => {
1196
- var _a;
1197
- const searchService = new MockSearchService();
1186
+ </collection-browser>`);
1187
+ el.baseQuery = 'web-archive';
1188
+ await el.updateComplete;
1189
+ await el.initialSearchComplete;
1190
+ await nextTick();
1191
+ console.log('\n\n*****\n\n*****\n\n', el.dataSource.getAllPages(), '\n\n*****\n\n*****\n\n');
1192
+ expect(el.dataSource.totalResults, 'total results').to.equal(1);
1193
+ expect((_a = el.dataSource.getTileModelAt(0)) === null || _a === void 0 ? void 0 : _a.title).to.equal('https://example.com');
1194
+ expect((_c = (_b = el.dataSource.getTileModelAt(0)) === null || _b === void 0 ? void 0 : _b.captureDates) === null || _c === void 0 ? void 0 : _c.length, 'capture dates').to.equal(1);
1195
+ });
1196
+ it('shows dropdown accordion in facet sidebar when opt-in strategy is specified', async () => {
1197
+ var _a;
1198
+ const searchService = new MockSearchService();
1198
1199
  const el = await fixture(html `<collection-browser
1199
1200
  .searchService=${searchService}
1200
1201
  facetLoadStrategy=${'opt-in'}
1201
1202
  >
1202
- </collection-browser>`);
1203
- el.baseQuery = 'foo';
1204
- await el.updateComplete;
1205
- await el.initialSearchComplete;
1206
- const facetsDropdown = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.desktop-facets-dropdown');
1207
- expect(facetsDropdown).to.exist;
1208
- });
1209
- it('shows temporarily unavailable message when facets suppressed', async () => {
1210
- var _a, _b;
1211
- const searchService = new MockSearchService();
1203
+ </collection-browser>`);
1204
+ el.baseQuery = 'foo';
1205
+ await el.updateComplete;
1206
+ await el.initialSearchComplete;
1207
+ const facetsDropdown = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.desktop-facets-dropdown');
1208
+ expect(facetsDropdown).to.exist;
1209
+ });
1210
+ it('shows temporarily unavailable message when facets suppressed', async () => {
1211
+ var _a, _b;
1212
+ const searchService = new MockSearchService();
1212
1213
  const el = await fixture(html `<collection-browser
1213
1214
  .searchService=${searchService}
1214
1215
  facetLoadStrategy=${'off'}
1215
1216
  >
1216
- </collection-browser>`);
1217
- el.baseQuery = 'foo';
1218
- await el.updateComplete;
1219
- await el.initialSearchComplete;
1220
- const facetsMsg = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-message');
1221
- expect(facetsMsg).to.exist;
1222
- expect((_b = facetsMsg === null || facetsMsg === void 0 ? void 0 : facetsMsg.textContent) === null || _b === void 0 ? void 0 : _b.trim()).to.equal('Facets are temporarily unavailable.');
1223
- });
1224
- it('shows manage bar interface instead of sort bar when in manage view', async () => {
1225
- var _a, _b, _c, _d;
1226
- const searchService = new MockSearchService();
1217
+ </collection-browser>`);
1218
+ el.baseQuery = 'foo';
1219
+ await el.updateComplete;
1220
+ await el.initialSearchComplete;
1221
+ const facetsMsg = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.facets-message');
1222
+ expect(facetsMsg).to.exist;
1223
+ expect((_b = facetsMsg === null || facetsMsg === void 0 ? void 0 : facetsMsg.textContent) === null || _b === void 0 ? void 0 : _b.trim()).to.equal('Facets are temporarily unavailable.');
1224
+ });
1225
+ it('shows manage bar interface instead of sort bar when in manage view', async () => {
1226
+ var _a, _b, _c, _d;
1227
+ const searchService = new MockSearchService();
1227
1228
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
1228
- </collection-browser>`);
1229
- el.baseQuery = 'foo';
1230
- await el.updateComplete;
1231
- await el.initialSearchComplete;
1232
- el.isManageView = true;
1233
- await el.updateComplete;
1234
- expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('manage-bar')).to.exist;
1235
- expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar')).not.to.exist;
1236
- el.isManageView = false;
1237
- await el.updateComplete;
1238
- expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('manage-bar')).not.to.exist;
1239
- expect((_d = el.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('sort-filter-bar')).to.exist;
1240
- });
1241
- it('switches to grid display mode when manage view activated', async () => {
1242
- const searchService = new MockSearchService();
1229
+ </collection-browser>`);
1230
+ el.baseQuery = 'foo';
1231
+ await el.updateComplete;
1232
+ await el.initialSearchComplete;
1233
+ el.isManageView = true;
1234
+ await el.updateComplete;
1235
+ expect((_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('manage-bar')).to.exist;
1236
+ expect((_b = el.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('sort-filter-bar')).not.to.exist;
1237
+ el.isManageView = false;
1238
+ await el.updateComplete;
1239
+ expect((_c = el.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('manage-bar')).not.to.exist;
1240
+ expect((_d = el.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('sort-filter-bar')).to.exist;
1241
+ });
1242
+ it('switches to grid display mode when manage view activated', async () => {
1243
+ const searchService = new MockSearchService();
1243
1244
  const el = await fixture(html `<collection-browser
1244
1245
  .searchService=${searchService}
1245
1246
  .baseQuery=${'foo'}
1246
1247
  .displayMode=${'list-detail'}
1247
1248
  >
1248
- </collection-browser>`);
1249
- el.isManageView = true;
1250
- await el.updateComplete;
1251
- expect(el.displayMode).to.equal('grid');
1252
- });
1253
- it('can remove all checked tiles', async () => {
1254
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1255
- const searchService = new MockSearchService();
1249
+ </collection-browser>`);
1250
+ el.isManageView = true;
1251
+ await el.updateComplete;
1252
+ expect(el.displayMode).to.equal('grid');
1253
+ });
1254
+ it('can remove all checked tiles', async () => {
1255
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1256
+ const searchService = new MockSearchService();
1256
1257
  const el = await fixture(html `<collection-browser
1257
1258
  .searchService=${searchService}
1258
1259
  .baseNavigationUrl=${''}
1259
1260
  >
1260
- </collection-browser>`);
1261
- el.baseQuery = 'foo';
1262
- el.pageSize = 1; // To hit the edge case of a page break while offsetting tiles
1263
- await el.updateComplete;
1264
- await el.initialSearchComplete;
1265
- el.isManageView = true;
1266
- await el.updateComplete;
1267
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
1268
- expect(infiniteScroller).to.exist;
1269
- let tiles = (_b = infiniteScroller.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelectorAll('tile-dispatcher');
1270
- expect(tiles).to.exist;
1271
- expect(tiles === null || tiles === void 0 ? void 0 : tiles.length).to.equal(2);
1272
- const firstTile = tiles[0];
1273
- const firstTileLink = (_c = firstTile.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]');
1274
- expect((_d = firstTile.model) === null || _d === void 0 ? void 0 : _d.identifier).to.equal('foo');
1275
- expect(firstTileLink).to.exist;
1276
- // No effect if no tiles checked
1277
- el.removeCheckedTiles();
1278
- await el.updateComplete;
1279
- tiles = (_e = infiniteScroller.shadowRoot) === null || _e === void 0 ? void 0 : _e.querySelectorAll('tile-dispatcher');
1280
- expect(tiles).to.exist;
1281
- expect(tiles === null || tiles === void 0 ? void 0 : tiles.length).to.equal(2);
1282
- // Check the first tile
1283
- firstTileLink.click();
1284
- expect((_f = firstTile.model) === null || _f === void 0 ? void 0 : _f.checked).to.be.true;
1285
- // Remove checked tiles and verify that we only kept the second tile
1286
- el.removeCheckedTiles();
1287
- await el.updateComplete;
1288
- expect((_g = el === null || el === void 0 ? void 0 : el.dataSource) === null || _g === void 0 ? void 0 : _g.size, 'data source count').to.equal(1);
1289
- tiles = (_j = (_h = el.shadowRoot) === null || _h === void 0 ? void 0 : _h.querySelector('infinite-scroller').shadowRoot) === null || _j === void 0 ? void 0 : _j.querySelectorAll('tile-dispatcher');
1290
- expect(tiles).to.exist;
1291
- expect(tiles.length, 'tile count after `el.removeCheckedTiles()`').to.equal(1);
1292
- });
1293
- it('can check/uncheck all tiles', async () => {
1294
- const searchService = new MockSearchService();
1261
+ </collection-browser>`);
1262
+ el.baseQuery = 'foo';
1263
+ el.pageSize = 1; // To hit the edge case of a page break while offsetting tiles
1264
+ await el.updateComplete;
1265
+ await el.initialSearchComplete;
1266
+ el.isManageView = true;
1267
+ await el.updateComplete;
1268
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
1269
+ expect(infiniteScroller).to.exist;
1270
+ let tiles = (_b = infiniteScroller.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelectorAll('tile-dispatcher');
1271
+ expect(tiles).to.exist;
1272
+ expect(tiles === null || tiles === void 0 ? void 0 : tiles.length).to.equal(2);
1273
+ const firstTile = tiles[0];
1274
+ const firstTileLink = (_c = firstTile.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]');
1275
+ expect((_d = firstTile.model) === null || _d === void 0 ? void 0 : _d.identifier).to.equal('foo');
1276
+ expect(firstTileLink).to.exist;
1277
+ // No effect if no tiles checked
1278
+ el.removeCheckedTiles();
1279
+ await el.updateComplete;
1280
+ tiles = (_e = infiniteScroller.shadowRoot) === null || _e === void 0 ? void 0 : _e.querySelectorAll('tile-dispatcher');
1281
+ expect(tiles).to.exist;
1282
+ expect(tiles === null || tiles === void 0 ? void 0 : tiles.length).to.equal(2);
1283
+ // Check the first tile
1284
+ firstTileLink.click();
1285
+ expect((_f = firstTile.model) === null || _f === void 0 ? void 0 : _f.checked).to.be.true;
1286
+ // Remove checked tiles and verify that we only kept the second tile
1287
+ el.removeCheckedTiles();
1288
+ await el.updateComplete;
1289
+ expect((_g = el === null || el === void 0 ? void 0 : el.dataSource) === null || _g === void 0 ? void 0 : _g.size, 'data source count').to.equal(1);
1290
+ tiles = (_j = (_h = el.shadowRoot) === null || _h === void 0 ? void 0 : _h.querySelector('infinite-scroller').shadowRoot) === null || _j === void 0 ? void 0 : _j.querySelectorAll('tile-dispatcher');
1291
+ expect(tiles).to.exist;
1292
+ expect(tiles.length, 'tile count after `el.removeCheckedTiles()`').to.equal(1);
1293
+ });
1294
+ it('can check/uncheck all tiles', async () => {
1295
+ const searchService = new MockSearchService();
1295
1296
  const el = await fixture(html `<collection-browser
1296
1297
  .searchService=${searchService}
1297
1298
  .baseNavigationUrl=${''}
1298
1299
  >
1299
- </collection-browser>`);
1300
- el.baseQuery = 'foo';
1301
- await el.updateComplete;
1302
- await el.initialSearchComplete;
1303
- el.isManageView = true;
1304
- await el.updateComplete;
1305
- expect(el.dataSource.checkedTileModels.length).to.equal(0);
1306
- expect(el.dataSource.uncheckedTileModels.length).to.equal(2);
1307
- el.dataSource.checkAllTiles();
1308
- expect(el.dataSource.checkedTileModels.length).to.equal(2);
1309
- expect(el.dataSource.uncheckedTileModels.length).to.equal(0);
1310
- el.dataSource.uncheckAllTiles();
1311
- expect(el.dataSource.checkedTileModels.length).to.equal(0);
1312
- expect(el.dataSource.uncheckedTileModels.length).to.equal(2);
1313
- });
1314
- it('emits event when item removal requested', async () => {
1315
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1316
- const spy = sinon.spy();
1317
- const searchService = new MockSearchService();
1300
+ </collection-browser>`);
1301
+ el.baseQuery = 'foo';
1302
+ await el.updateComplete;
1303
+ await el.initialSearchComplete;
1304
+ el.isManageView = true;
1305
+ await el.updateComplete;
1306
+ expect(el.dataSource.checkedTileModels.length).to.equal(0);
1307
+ expect(el.dataSource.uncheckedTileModels.length).to.equal(2);
1308
+ el.dataSource.checkAllTiles();
1309
+ expect(el.dataSource.checkedTileModels.length).to.equal(2);
1310
+ expect(el.dataSource.uncheckedTileModels.length).to.equal(0);
1311
+ el.dataSource.uncheckAllTiles();
1312
+ expect(el.dataSource.checkedTileModels.length).to.equal(0);
1313
+ expect(el.dataSource.uncheckedTileModels.length).to.equal(2);
1314
+ });
1315
+ it('emits event when item removal requested', async () => {
1316
+ var _a, _b, _c, _d, _e;
1317
+ const spy = sinon.spy();
1318
+ const searchService = new MockSearchService();
1318
1319
  const el = await fixture(html `<collection-browser
1319
1320
  .searchService=${searchService}
1320
1321
  .baseNavigationUrl=${''}
1321
1322
  @itemRemovalRequested=${spy}
1322
1323
  >
1323
- </collection-browser>`);
1324
- el.baseQuery = 'foo';
1325
- await el.updateComplete;
1326
- await el.initialSearchComplete;
1327
- el.isManageView = true;
1328
- await el.updateComplete;
1329
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
1330
- expect(infiniteScroller).to.exist;
1331
- const tiles = (_b = infiniteScroller.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelectorAll('tile-dispatcher');
1332
- expect(tiles).to.exist.and.have.length(2);
1333
- const firstTile = tiles[0];
1334
- const firstTileLink = (_c = firstTile.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]');
1335
- expect((_d = firstTile.model) === null || _d === void 0 ? void 0 : _d.identifier).to.equal('foo');
1336
- expect(firstTileLink).to.exist;
1337
- // Check the first tile
1338
- firstTileLink.click();
1339
- await el.updateComplete;
1340
- const manageBar = (_e = el.shadowRoot) === null || _e === void 0 ? void 0 : _e.querySelector('manage-bar');
1341
- expect(manageBar).to.exist;
1342
- // Emit remove event from manage bar
1343
- manageBar.dispatchEvent(new CustomEvent('removeItems'));
1344
- await el.updateComplete;
1345
- expect(spy.callCount).to.equal(1);
1346
- expect(spy.args[0].length).to.equal(1);
1347
- expect((_j = (_h = (_g = (_f = spy.args[0][0]) === null || _f === void 0 ? void 0 : _f.detail) === null || _g === void 0 ? void 0 : _g.items) === null || _h === void 0 ? void 0 : _h[0]) === null || _j === void 0 ? void 0 : _j.identifier).to.equal('foo');
1348
- });
1349
- it('disables manage view when manage bar cancelled', async () => {
1350
- var _a;
1351
- const searchService = new MockSearchService();
1324
+ </collection-browser>`);
1325
+ el.baseQuery = 'foo';
1326
+ await el.updateComplete;
1327
+ await el.initialSearchComplete;
1328
+ el.isManageView = true;
1329
+ await el.updateComplete;
1330
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
1331
+ expect(infiniteScroller).to.exist;
1332
+ const tiles = (_b = infiniteScroller.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelectorAll('tile-dispatcher');
1333
+ expect(tiles).to.exist.and.have.length(2);
1334
+ const firstTile = tiles[0];
1335
+ const firstTileLink = (_c = firstTile.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('a[href]');
1336
+ expect((_d = firstTile.model) === null || _d === void 0 ? void 0 : _d.identifier).to.equal('foo');
1337
+ expect(firstTileLink).to.exist;
1338
+ // Check the first tile
1339
+ firstTileLink.click();
1340
+ await el.updateComplete;
1341
+ const manageBar = (_e = el.shadowRoot) === null || _e === void 0 ? void 0 : _e.querySelector('manage-bar');
1342
+ expect(manageBar).to.exist;
1343
+ // Emit remove event from manage bar
1344
+ manageBar.dispatchEvent(new CustomEvent('removeItems'));
1345
+ await el.updateComplete;
1346
+ expect(spy.callCount).to.equal(1);
1347
+ expect(spy.args[0].length).to.equal(1);
1348
+ expect(spy.args[0][0].detail.items[0]).to.equal('foo');
1349
+ });
1350
+ it('disables manage view when manage bar cancelled', async () => {
1351
+ var _a;
1352
+ const searchService = new MockSearchService();
1352
1353
  const el = await fixture(html `<collection-browser
1353
1354
  .searchService=${searchService}
1354
1355
  .baseNavigationUrl=${''}
1355
1356
  >
1356
- </collection-browser>`);
1357
- el.baseQuery = 'foo';
1358
- await el.updateComplete;
1359
- await el.initialSearchComplete;
1360
- el.isManageView = true;
1361
- await el.updateComplete;
1362
- const manageBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('manage-bar');
1363
- expect(manageBar).to.exist;
1364
- // Emit remove event from manage bar
1365
- manageBar.dispatchEvent(new CustomEvent('cancel'));
1366
- await el.updateComplete;
1367
- expect(el.isManageView).to.be.false;
1368
- });
1369
- it('enable/disable manage view delete button when you selectAll/unselectAll', async () => {
1370
- var _a, _b, _c, _d;
1371
- const searchService = new MockSearchService();
1357
+ </collection-browser>`);
1358
+ el.baseQuery = 'foo';
1359
+ await el.updateComplete;
1360
+ await el.initialSearchComplete;
1361
+ el.isManageView = true;
1362
+ await el.updateComplete;
1363
+ const manageBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('manage-bar');
1364
+ expect(manageBar).to.exist;
1365
+ // Emit remove event from manage bar
1366
+ manageBar.dispatchEvent(new CustomEvent('cancel'));
1367
+ await el.updateComplete;
1368
+ expect(el.isManageView).to.be.false;
1369
+ });
1370
+ it('enable/disable manage view delete button when you selectAll/unselectAll', async () => {
1371
+ var _a, _b, _c, _d;
1372
+ const searchService = new MockSearchService();
1372
1373
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
1373
- </collection-browser>`);
1374
- el.baseQuery = 'foo';
1375
- await el.updateComplete;
1376
- await el.initialSearchComplete;
1377
- el.isManageView = true;
1378
- await el.updateComplete;
1379
- const manageBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('manage-bar');
1380
- expect(manageBar).to.exist;
1381
- // disable button exists
1382
- expect((_b = manageBar === null || manageBar === void 0 ? void 0 : manageBar.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.danger:disabled')).to.be
1383
- .exist;
1384
- // Emit remove event from manage bar
1385
- manageBar.dispatchEvent(new CustomEvent('selectAll'));
1386
- await el.updateComplete;
1387
- // disable button does not exists
1388
- expect((_c = manageBar === null || manageBar === void 0 ? void 0 : manageBar.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.danger:disabled')).to.be.not
1389
- .exist;
1390
- // Emit remove event from manage bar
1391
- manageBar.dispatchEvent(new CustomEvent('unselectAll'));
1392
- await el.updateComplete;
1393
- // disable button exists again
1394
- expect((_d = manageBar === null || manageBar === void 0 ? void 0 : manageBar.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('.danger:disabled')).to.be
1395
- .exist;
1396
- });
1397
- it('applies loans tab properties to sort bar', async () => {
1398
- var _a;
1399
- const searchService = new MockSearchService();
1374
+ </collection-browser>`);
1375
+ el.baseQuery = 'foo';
1376
+ await el.updateComplete;
1377
+ await el.initialSearchComplete;
1378
+ el.isManageView = true;
1379
+ await el.updateComplete;
1380
+ const manageBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('manage-bar');
1381
+ expect(manageBar).to.exist;
1382
+ // disable button exists
1383
+ expect((_b = manageBar === null || manageBar === void 0 ? void 0 : manageBar.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('.danger:disabled')).to.be
1384
+ .exist;
1385
+ // Emit remove event from manage bar
1386
+ manageBar.dispatchEvent(new CustomEvent('selectAll'));
1387
+ await el.updateComplete;
1388
+ // disable button does not exists
1389
+ expect((_c = manageBar === null || manageBar === void 0 ? void 0 : manageBar.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.danger:disabled')).to.be.not
1390
+ .exist;
1391
+ // Emit remove event from manage bar
1392
+ manageBar.dispatchEvent(new CustomEvent('unselectAll'));
1393
+ await el.updateComplete;
1394
+ // disable button exists again
1395
+ expect((_d = manageBar === null || manageBar === void 0 ? void 0 : manageBar.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('.danger:disabled')).to.be
1396
+ .exist;
1397
+ });
1398
+ it('applies loans tab properties to sort bar', async () => {
1399
+ var _a;
1400
+ const searchService = new MockSearchService();
1400
1401
  const el = await fixture(html `<collection-browser
1401
1402
  .baseNavigationUrl=${''}
1402
1403
  .searchService=${searchService}
1403
1404
  .enableSortOptionsSlot=${true}
1404
1405
  >
1405
- </collection-browser>`);
1406
- el.baseQuery = 'collection:foo';
1407
- await el.updateComplete;
1408
- await aTimeout(10);
1409
- const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
1410
- expect(sortBar === null || sortBar === void 0 ? void 0 : sortBar.enableSortOptionsSlot, 'show loans in sort bar').to.be.true;
1411
- expect(el.enableSortOptionsSlot, 'collection browser is loans tab').to.be
1412
- .true;
1413
- const loansTabSlot = sortBar.querySelector('slot[name="sort-options"]');
1414
- expect(loansTabSlot).to.exist;
1415
- });
1416
- it('can suppress presence of result count', async () => {
1417
- var _a;
1418
- const searchService = new MockSearchService();
1406
+ </collection-browser>`);
1407
+ el.baseQuery = 'collection:foo';
1408
+ await el.updateComplete;
1409
+ await aTimeout(10);
1410
+ const sortBar = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('sort-filter-bar');
1411
+ expect(sortBar === null || sortBar === void 0 ? void 0 : sortBar.enableSortOptionsSlot, 'show loans in sort bar').to.be.true;
1412
+ expect(el.enableSortOptionsSlot, 'collection browser is loans tab').to.be
1413
+ .true;
1414
+ const loansTabSlot = sortBar.querySelector('slot[name="sort-options"]');
1415
+ expect(loansTabSlot).to.exist;
1416
+ });
1417
+ it('can suppress presence of result count', async () => {
1418
+ var _a;
1419
+ const searchService = new MockSearchService();
1419
1420
  const el = await fixture(html `<collection-browser
1420
1421
  .searchService=${searchService}
1421
1422
  suppressResultCount
1422
- ></collection-browser>`);
1423
- el.baseQuery = 'collection:foo';
1424
- await el.updateComplete;
1425
- await el.initialSearchComplete;
1426
- const resultCount = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#results-total');
1427
- expect(resultCount).not.to.exist;
1428
- });
1429
- it('can suppress presence of result tiles', async () => {
1430
- var _a;
1431
- const searchService = new MockSearchService();
1423
+ ></collection-browser>`);
1424
+ el.baseQuery = 'collection:foo';
1425
+ await el.updateComplete;
1426
+ await el.initialSearchComplete;
1427
+ const resultCount = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('#results-total');
1428
+ expect(resultCount).not.to.exist;
1429
+ });
1430
+ it('can suppress presence of result tiles', async () => {
1431
+ var _a;
1432
+ const searchService = new MockSearchService();
1432
1433
  const el = await fixture(html `<collection-browser
1433
1434
  .searchService=${searchService}
1434
1435
  suppressResultTiles
1435
- ></collection-browser>`);
1436
- el.baseQuery = 'collection:foo';
1437
- await el.updateComplete;
1438
- const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
1439
- expect(infiniteScroller).not.to.exist;
1440
- });
1441
- it('fetch larger result on search page for admin user to manage items', async () => {
1442
- const resultsSpy = sinon.spy();
1443
- const searchService = new MockSearchService({
1444
- asyncResponse: true,
1445
- resultsSpy,
1446
- });
1436
+ ></collection-browser>`);
1437
+ el.baseQuery = 'collection:foo';
1438
+ await el.updateComplete;
1439
+ const infiniteScroller = (_a = el.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('infinite-scroller');
1440
+ expect(infiniteScroller).not.to.exist;
1441
+ });
1442
+ it('fetch larger result on search page for admin user to manage items', async () => {
1443
+ const resultsSpy = sinon.spy();
1444
+ const searchService = new MockSearchService({
1445
+ asyncResponse: true,
1446
+ resultsSpy,
1447
+ });
1447
1448
  const el = await fixture(html `<collection-browser .searchService=${searchService}>
1448
- </collection-browser>`);
1449
- const numberOfPages = 15;
1450
- el.baseQuery = 'jack';
1451
- el.isManageView = true;
1452
- await el.dataSource.fetchPage(1, numberOfPages);
1453
- await el.updateComplete;
1454
- const initialResults = el.dataSource.getAllPages();
1455
- expect(Object.keys(initialResults).length).to.deep.equal(numberOfPages);
1456
- });
1457
- });
1449
+ </collection-browser>`);
1450
+ const numberOfPages = 15;
1451
+ el.baseQuery = 'jack';
1452
+ el.isManageView = true;
1453
+ await el.dataSource.fetchPage(1, numberOfPages);
1454
+ await el.updateComplete;
1455
+ const initialResults = el.dataSource.getAllPages();
1456
+ expect(Object.keys(initialResults).length).to.deep.equal(numberOfPages);
1457
+ });
1458
+ });
1458
1459
  //# sourceMappingURL=collection-browser.test.js.map