@internetarchive/collection-browser 2.4.1-e2e-test-2 → 2.5.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/.editorconfig +29 -29
  2. package/.husky/pre-commit +4 -4
  3. package/LICENSE +661 -661
  4. package/README.md +83 -83
  5. package/dist/index.d.ts +12 -12
  6. package/dist/index.js +12 -12
  7. package/dist/src/app-root.d.ts +91 -91
  8. package/dist/src/app-root.js +487 -487
  9. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  10. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  11. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  12. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  13. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  14. package/dist/src/assets/img/icons/chevron.js +2 -2
  15. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  16. package/dist/src/assets/img/icons/contract.js +2 -2
  17. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  18. package/dist/src/assets/img/icons/empty-query.js +2 -2
  19. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  20. package/dist/src/assets/img/icons/expand.js +2 -2
  21. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  23. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  24. package/dist/src/assets/img/icons/eye.js +2 -2
  25. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  26. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  27. package/dist/src/assets/img/icons/favorite-unfilled.d.ts +1 -1
  28. package/dist/src/assets/img/icons/favorite-unfilled.js +2 -2
  29. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  30. package/dist/src/assets/img/icons/login-required.js +2 -2
  31. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  32. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  59. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  60. package/dist/src/assets/img/icons/null-result.js +2 -2
  61. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  62. package/dist/src/assets/img/icons/restricted.js +2 -2
  63. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  64. package/dist/src/assets/img/icons/reviews.js +2 -2
  65. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  66. package/dist/src/assets/img/icons/upload.js +2 -2
  67. package/dist/src/assets/img/icons/views.d.ts +1 -1
  68. package/dist/src/assets/img/icons/views.js +2 -2
  69. package/dist/src/circular-activity-indicator.d.ts +5 -5
  70. package/dist/src/circular-activity-indicator.js +17 -17
  71. package/dist/src/collection-browser.d.ts +564 -466
  72. package/dist/src/collection-browser.js +1568 -1479
  73. package/dist/src/collection-browser.js.map +1 -1
  74. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  75. package/dist/src/collection-facets/facet-row.js +117 -116
  76. package/dist/src/collection-facets/facet-row.js.map +1 -1
  77. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  78. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  79. package/dist/src/collection-facets/facets-template.d.ts +14 -17
  80. package/dist/src/collection-facets/facets-template.js +47 -144
  81. package/dist/src/collection-facets/facets-template.js.map +1 -1
  82. package/dist/src/collection-facets/more-facets-content.d.ts +106 -74
  83. package/dist/src/collection-facets/more-facets-content.js +425 -377
  84. package/dist/src/collection-facets/more-facets-content.js.map +1 -1
  85. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  86. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  87. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  88. package/dist/src/collection-facets/toggle-switch.js +94 -94
  89. package/dist/src/collection-facets.d.ts +103 -103
  90. package/dist/src/collection-facets.js +514 -514
  91. package/dist/src/collection-facets.js.map +1 -1
  92. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +241 -241
  93. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  94. package/dist/src/data-source/collection-browser-data-source.d.ts +378 -378
  95. package/dist/src/data-source/collection-browser-data-source.js +985 -985
  96. package/dist/src/data-source/collection-browser-query-state.d.ts +43 -43
  97. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  98. package/dist/src/data-source/models.d.ts +28 -28
  99. package/dist/src/data-source/models.js +8 -8
  100. package/dist/src/empty-placeholder.d.ts +23 -23
  101. package/dist/src/empty-placeholder.js +74 -74
  102. package/dist/src/expanded-date-picker.d.ts +43 -43
  103. package/dist/src/expanded-date-picker.js +109 -109
  104. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  105. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  106. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  107. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  108. package/dist/src/manage/manage-bar.d.ts +30 -30
  109. package/dist/src/manage/manage-bar.js +61 -61
  110. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  111. package/dist/src/mediatype/mediatype-config.js +91 -91
  112. package/dist/src/models.d.ts +209 -209
  113. package/dist/src/models.js +381 -381
  114. package/dist/src/restoration-state-handler.d.ts +70 -70
  115. package/dist/src/restoration-state-handler.js +357 -357
  116. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  117. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  118. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  119. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  120. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  121. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  122. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  123. package/dist/src/sort-filter-bar/img/list.js +2 -2
  124. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  125. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  126. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  127. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  128. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  129. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  130. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  131. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  132. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  133. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  134. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +222 -222
  135. package/dist/src/sort-filter-bar/sort-filter-bar.js +696 -696
  136. package/dist/src/styles/ia-button.d.ts +2 -2
  137. package/dist/src/styles/ia-button.js +16 -16
  138. package/dist/src/styles/item-image-styles.d.ts +8 -8
  139. package/dist/src/styles/item-image-styles.js +9 -9
  140. package/dist/src/styles/sr-only.d.ts +1 -1
  141. package/dist/src/styles/sr-only.js +2 -2
  142. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  143. package/dist/src/tiles/base-tile-component.js +63 -63
  144. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  145. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  146. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  147. package/dist/src/tiles/grid/account-tile.js +72 -72
  148. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  149. package/dist/src/tiles/grid/collection-tile.js +80 -80
  150. package/dist/src/tiles/grid/item-tile.d.ts +30 -30
  151. package/dist/src/tiles/grid/item-tile.js +149 -149
  152. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  153. package/dist/src/tiles/grid/search-tile.js +51 -51
  154. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  155. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  156. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  157. package/dist/src/tiles/grid/tile-stats.js +53 -53
  158. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  159. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  160. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  161. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  162. package/dist/src/tiles/image-block.d.ts +17 -17
  163. package/dist/src/tiles/image-block.js +73 -73
  164. package/dist/src/tiles/item-image.d.ts +39 -39
  165. package/dist/src/tiles/item-image.js +154 -154
  166. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  167. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  168. package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
  169. package/dist/src/tiles/list/tile-list-compact.js +114 -114
  170. package/dist/src/tiles/list/tile-list.d.ts +50 -50
  171. package/dist/src/tiles/list/tile-list.js +315 -315
  172. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  173. package/dist/src/tiles/mediatype-icon.js +47 -47
  174. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  175. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  176. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  177. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  178. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  179. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  180. package/dist/src/tiles/review-block.d.ts +12 -12
  181. package/dist/src/tiles/review-block.js +56 -56
  182. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  183. package/dist/src/tiles/text-snippet-block.js +73 -73
  184. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  185. package/dist/src/tiles/tile-dispatcher.js +229 -229
  186. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  187. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  188. package/dist/src/utils/analytics-events.d.ts +28 -28
  189. package/dist/src/utils/analytics-events.js +30 -30
  190. package/dist/src/utils/array-equals.d.ts +4 -4
  191. package/dist/src/utils/array-equals.js +10 -10
  192. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  193. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  194. package/dist/src/utils/facet-utils.d.ts +83 -0
  195. package/dist/src/utils/facet-utils.js +147 -0
  196. package/dist/src/utils/facet-utils.js.map +1 -0
  197. package/dist/src/utils/format-count.d.ts +7 -7
  198. package/dist/src/utils/format-count.js +76 -76
  199. package/dist/src/utils/format-date.d.ts +2 -2
  200. package/dist/src/utils/format-date.js +25 -25
  201. package/dist/src/utils/format-unit-size.d.ts +2 -2
  202. package/dist/src/utils/format-unit-size.js +33 -33
  203. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  204. package/dist/src/utils/local-date-from-utc.js +15 -15
  205. package/dist/src/utils/log.d.ts +7 -7
  206. package/dist/src/utils/log.js +15 -15
  207. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  208. package/dist/src/utils/resolve-mediatype.js +23 -23
  209. package/dist/src/utils/sha1.d.ts +2 -2
  210. package/dist/src/utils/sha1.js +8 -8
  211. package/dist/test/collection-browser.test.d.ts +1 -1
  212. package/dist/test/collection-browser.test.js +1294 -1293
  213. package/dist/test/collection-browser.test.js.map +1 -1
  214. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  215. package/dist/test/collection-facets/facet-row.test.js +227 -203
  216. package/dist/test/collection-facets/facet-row.test.js.map +1 -1
  217. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  218. package/dist/test/collection-facets/facets-template.test.js +91 -114
  219. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  220. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  221. package/dist/test/collection-facets/more-facets-content.test.js +150 -141
  222. package/dist/test/collection-facets/more-facets-content.test.js.map +1 -1
  223. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  224. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  225. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  226. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  227. package/dist/test/collection-facets.test.d.ts +2 -2
  228. package/dist/test/collection-facets.test.js +652 -652
  229. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  230. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  231. package/dist/test/empty-placeholder.test.d.ts +1 -1
  232. package/dist/test/empty-placeholder.test.js +63 -63
  233. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  234. package/dist/test/expanded-date-picker.test.js +95 -95
  235. package/dist/test/icon-overlay.test.d.ts +1 -1
  236. package/dist/test/icon-overlay.test.js +24 -24
  237. package/dist/test/image-block.test.d.ts +1 -1
  238. package/dist/test/image-block.test.js +48 -48
  239. package/dist/test/item-image.test.d.ts +1 -1
  240. package/dist/test/item-image.test.js +85 -85
  241. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  242. package/dist/test/manage/manage-bar.test.js +81 -81
  243. package/dist/test/mediatype-config.test.d.ts +1 -1
  244. package/dist/test/mediatype-config.test.js +16 -16
  245. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  246. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  247. package/dist/test/mocks/mock-search-responses.d.ts +25 -24
  248. package/dist/test/mocks/mock-search-responses.js +942 -860
  249. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  250. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  251. package/dist/test/mocks/mock-search-service.js +54 -53
  252. package/dist/test/mocks/mock-search-service.js.map +1 -1
  253. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  254. package/dist/test/restoration-state-handler.test.js +270 -270
  255. package/dist/test/review-block.test.d.ts +1 -1
  256. package/dist/test/review-block.test.js +44 -44
  257. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  258. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  259. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  260. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  261. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  262. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  263. package/dist/test/text-overlay.test.d.ts +1 -1
  264. package/dist/test/text-overlay.test.js +48 -48
  265. package/dist/test/text-snippet-block.test.d.ts +1 -1
  266. package/dist/test/text-snippet-block.test.js +57 -57
  267. package/dist/test/tile-stats.test.d.ts +1 -1
  268. package/dist/test/tile-stats.test.js +81 -81
  269. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  270. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  271. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  272. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  273. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  274. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  275. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  276. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  277. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  278. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  279. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  280. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  281. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  282. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  283. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  284. package/dist/test/tiles/list/tile-list.test.js +297 -297
  285. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  286. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  287. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  288. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  289. package/dist/test/utils/array-equals.test.d.ts +1 -1
  290. package/dist/test/utils/array-equals.test.js +26 -26
  291. package/dist/test/utils/format-count.test.d.ts +1 -1
  292. package/dist/test/utils/format-count.test.js +23 -23
  293. package/dist/test/utils/format-date.test.d.ts +1 -1
  294. package/dist/test/utils/format-date.test.js +17 -17
  295. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  296. package/dist/test/utils/format-unit-size.test.js +17 -17
  297. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  298. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  299. package/local.archive.org.cert +86 -86
  300. package/local.archive.org.key +27 -27
  301. package/package.json +1 -1
  302. package/renovate.json +6 -6
  303. package/src/collection-browser.ts +106 -19
  304. package/src/collection-facets/facet-row.ts +5 -4
  305. package/src/collection-facets/facets-template.ts +12 -114
  306. package/src/collection-facets/more-facets-content.ts +220 -144
  307. package/src/collection-facets.ts +24 -12
  308. package/src/utils/facet-utils.ts +182 -0
  309. package/test/collection-browser.test.ts +1 -0
  310. package/test/collection-facets/facet-row.test.ts +30 -6
  311. package/test/collection-facets/facets-template.test.ts +6 -32
  312. package/test/collection-facets/more-facets-content.test.ts +46 -35
  313. package/test/mocks/mock-search-responses.ts +86 -0
  314. package/test/mocks/mock-search-service.ts +2 -0
  315. package/web-dev-server.config.mjs +30 -30
  316. package/web-test-runner.config.mjs +41 -41
@@ -22,6 +22,7 @@ import {
22
22
  } from '@internetarchive/search-service';
23
23
  import type { ModalManagerInterface } from '@internetarchive/modal-manager';
24
24
  import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
25
+ import { msg } from '@lit/localize';
25
26
  import {
26
27
  SelectedFacets,
27
28
  FacetGroup,
@@ -31,6 +32,8 @@ import {
31
32
  suppressedCollections,
32
33
  valueFacetSort,
33
34
  defaultFacetSort,
35
+ getDefaultSelectedFacets,
36
+ FacetEventDetails,
34
37
  } from '../models';
35
38
  import type {
36
39
  CollectionTitles,
@@ -45,21 +48,20 @@ import {
45
48
  } from '../utils/analytics-events';
46
49
  import './toggle-switch';
47
50
  import { srOnlyStyle } from '../styles/sr-only';
51
+ import {
52
+ mergeSelectedFacets,
53
+ sortBucketsBySelectionState,
54
+ updateSelectedFacetBucket,
55
+ } from '../utils/facet-utils';
48
56
 
49
57
  @customElement('more-facets-content')
50
58
  export class MoreFacetsContent extends LitElement {
51
59
  @property({ type: String }) facetKey?: FacetOption;
52
60
 
53
- @property({ type: String }) facetAggregationKey?: FacetOption;
54
-
55
61
  @property({ type: String }) query?: string;
56
62
 
57
63
  @property({ type: Object }) filterMap?: FilterMap;
58
64
 
59
- @property({ type: Object }) modalManager?: ModalManagerInterface;
60
-
61
- @property({ type: Object }) searchService?: SearchServiceInterface;
62
-
63
65
  @property({ type: String }) searchType?: SearchType;
64
66
 
65
67
  @property({ type: Object }) pageSpecifierParams?: PageSpecifierParams;
@@ -67,37 +69,73 @@ export class MoreFacetsContent extends LitElement {
67
69
  @property({ type: Object })
68
70
  collectionTitles?: CollectionTitles;
69
71
 
72
+ /**
73
+ * Maximum number of facets to show per page within the modal.
74
+ */
75
+ @property({ type: Number }) facetsPerPage = 35;
76
+
77
+ /**
78
+ * Whether we are waiting for facet data to load.
79
+ * We begin with this set to true so that we show an initial loading indicator.
80
+ */
81
+ @property({ type: Boolean }) facetsLoading = true;
82
+
83
+ /**
84
+ * The set of pre-existing facet selections (including both selected & negated facets).
85
+ */
70
86
  @property({ type: Object }) selectedFacets?: SelectedFacets;
71
87
 
72
88
  @property({ type: String }) sortedBy: AggregationSortType =
73
89
  AggregationSortType.COUNT;
74
90
 
75
- @property({ type: Object, attribute: false })
76
- analyticsHandler?: AnalyticsManagerInterface;
77
-
78
- @state() aggregations?: Record<string, Aggregation>;
91
+ @property({ type: Object }) modalManager?: ModalManagerInterface;
79
92
 
80
- @state() facetGroup?: FacetGroup[] = [];
93
+ @property({ type: Object }) searchService?: SearchServiceInterface;
81
94
 
82
- @state() facetGroupTitle?: String = '';
95
+ @property({ type: Object, attribute: false })
96
+ analyticsHandler?: AnalyticsManagerInterface;
83
97
 
84
- @state() pageNumber = 1;
98
+ /**
99
+ * The full set of aggregations received from the search service
100
+ */
101
+ @state() private aggregations?: Record<string, Aggregation>;
85
102
 
86
103
  /**
87
- * Facets are loading on popup
104
+ * A FacetGroup storing the full set of facet buckets to be shown on the dialog.
88
105
  */
89
- @state() facetsLoading = true;
106
+ @state() private facetGroup?: FacetGroup;
90
107
 
91
- @state() paginationSize = 0;
108
+ /**
109
+ * An object holding any changes the patron has made to their facet selections
110
+ * within the modal dialog but which they have not yet applied. These are
111
+ * eventually merged into the existing `selectedFacets` when the patron applies
112
+ * their changes, or discarded if they cancel/close the dialog.
113
+ */
114
+ @state() private unappliedFacetChanges = getDefaultSelectedFacets();
92
115
 
93
- @state() facetsType = 'modal';
116
+ /**
117
+ * Which page of facets we are showing.
118
+ */
119
+ @state() private pageNumber = 1;
94
120
 
95
- private facetsPerPage = 35;
121
+ willUpdate(changed: PropertyValues): void {
122
+ if (
123
+ changed.has('aggregations') ||
124
+ changed.has('facetsPerPage') ||
125
+ changed.has('sortedBy') ||
126
+ changed.has('selectedFacets') ||
127
+ changed.has('unappliedFacetChanges')
128
+ ) {
129
+ // Convert the merged selected facets & aggregations into a facet group, and
130
+ // store it for reuse across pages.
131
+ this.facetGroup = this.mergedFacets;
132
+ }
133
+ }
96
134
 
97
- updated(changed: PropertyValues) {
135
+ updated(changed: PropertyValues): void {
136
+ // If any of the search properties change, it triggers a facet fetch
98
137
  if (
99
138
  changed.has('facetKey') ||
100
- changed.has('facetAggregationKey') ||
101
139
  changed.has('query') ||
102
140
  changed.has('searchType') ||
103
141
  changed.has('filterMap')
@@ -108,13 +146,9 @@ export class MoreFacetsContent extends LitElement {
108
146
 
109
147
  this.updateSpecificFacets();
110
148
  }
111
-
112
- if (changed.has('pageNumber')) {
113
- this.facetGroup = this.aggregationFacetGroups;
114
- }
115
149
  }
116
150
 
117
- firstUpdated() {
151
+ firstUpdated(): void {
118
152
  this.setupEscapeListeners();
119
153
  }
120
154
 
@@ -148,11 +182,13 @@ export class MoreFacetsContent extends LitElement {
148
182
  * - this.aggregations - hold result of search service and being used for further processing.
149
183
  */
150
184
  async updateSpecificFacets(): Promise<void> {
185
+ if (!this.facetKey) return; // Can't fetch facets if we don't know what type of facets we need!
186
+
151
187
  const trimmedQuery = this.query?.trim();
152
188
  if (!trimmedQuery && this.isSearchResultsPage) return; // The search page _requires_ a query
153
189
 
154
190
  const aggregations = {
155
- simpleParams: [this.facetAggregationKey as string],
191
+ simpleParams: [this.facetKey],
156
192
  };
157
193
  const aggregationsSize = 65535; // todo - do we want to have all the records at once?
158
194
 
@@ -167,8 +203,6 @@ export class MoreFacetsContent extends LitElement {
167
203
 
168
204
  const results = await this.searchService?.search(params, this.searchType);
169
205
  this.aggregations = results?.success?.response.aggregations;
170
-
171
- this.facetGroup = this.aggregationFacetGroups;
172
206
  this.facetsLoading = false;
173
207
 
174
208
  const collectionTitles = results?.success?.response?.collectionTitles;
@@ -179,6 +213,9 @@ export class MoreFacetsContent extends LitElement {
179
213
  }
180
214
  }
181
215
 
216
+ /**
217
+ * Handler for page number changes from the pagination widget.
218
+ */
182
219
  private pageNumberClicked(e: CustomEvent<{ page: number }>) {
183
220
  const page = e?.detail?.page;
184
221
  if (page) {
@@ -195,32 +232,24 @@ export class MoreFacetsContent extends LitElement {
195
232
  /**
196
233
  * Combines the selected facets with the aggregations to create a single list of facets
197
234
  */
198
- private get mergedFacets(): FacetGroup[] | void {
199
- const facetGroups: FacetGroup[] = [];
235
+ private get mergedFacets(): FacetGroup | undefined {
236
+ if (!this.facetKey || !this.selectedFacets) return undefined;
200
237
 
201
- const selectedFacetGroup = this.selectedFacetGroups.find(
202
- group => group.key === this.facetKey
203
- );
204
- const aggregateFacetGroup = this.aggregationFacetGroups.find(
205
- group => group.key === this.facetKey
238
+ const { selectedFacetGroup, aggregationFacetGroup } = this;
239
+ const unappliedFacetBuckets = Object.values(
240
+ this.unappliedFacetChanges[this.facetKey]
206
241
  );
207
242
 
208
- // if the user selected a facet, but it's not in the aggregation, we add it as-is
209
- if (selectedFacetGroup && !aggregateFacetGroup) {
210
- facetGroups.push(selectedFacetGroup);
211
- return facetGroups;
212
- }
213
-
214
- // if we don't have an aggregate facet group, don't add this to the list
215
- if (!aggregateFacetGroup) return facetGroups;
243
+ // If we don't have any aggregations, then there is nothing to show yet
244
+ if (!aggregationFacetGroup) return undefined;
216
245
 
217
- // start with either the selected group if we have one, or the aggregate group
218
- const facetGroup = selectedFacetGroup ?? aggregateFacetGroup;
246
+ // Start with either the selected group if we have one, or the aggregate group otherwise
247
+ const facetGroup = { ...(selectedFacetGroup ?? aggregationFacetGroup) };
219
248
 
220
- // attach the counts to the selected buckets
249
+ // Attach the counts to the selected buckets
221
250
  const bucketsWithCount =
222
251
  selectedFacetGroup?.buckets.map(bucket => {
223
- const selectedBucket = aggregateFacetGroup.buckets.find(
252
+ const selectedBucket = aggregationFacetGroup.buckets.find(
224
253
  b => b.key === bucket.key
225
254
  );
226
255
  return selectedBucket
@@ -231,119 +260,143 @@ export class MoreFacetsContent extends LitElement {
231
260
  : bucket;
232
261
  }) ?? [];
233
262
 
234
- // append any additional buckets that were not selected
235
- aggregateFacetGroup.buckets.forEach(bucket => {
263
+ // Sort the buckets by selection state
264
+ // We do this *prior* to considering unapplied selections, because we want the facets
265
+ // to remain in position when they are selected/unselected, rather than re-sort themselves.
266
+ sortBucketsBySelectionState(bucketsWithCount, this.sortedBy);
267
+ console.log('done sorting buckets');
268
+
269
+ // Append any additional buckets that were not selected
270
+ aggregationFacetGroup.buckets.forEach(bucket => {
236
271
  const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);
237
272
  if (existingBucket) return;
238
273
  bucketsWithCount.push(bucket);
239
274
  });
275
+
276
+ // Apply any unapplied selections that appear on this page
277
+ for (const bucket of unappliedFacetBuckets) {
278
+ const existingBucketIndex = bucketsWithCount.findIndex(
279
+ b => b.key === bucket.key
280
+ );
281
+ if (existingBucketIndex >= 0) {
282
+ bucketsWithCount[existingBucketIndex] = { ...bucket };
283
+ }
284
+ }
240
285
  facetGroup.buckets = bucketsWithCount;
241
286
 
242
- facetGroups.push(facetGroup);
243
- return facetGroups;
287
+ return facetGroup;
244
288
  }
245
289
 
246
290
  /**
247
- * Converts the selected facets to a `FacetGroup` array,
248
- * which is easier to work with
291
+ * Converts the selected facets for the current facet key to a `FacetGroup`,
292
+ * which is easier to work with.
249
293
  */
250
- private get selectedFacetGroups(): FacetGroup[] {
251
- if (!this.selectedFacets) return [];
252
-
253
- const facetGroups: FacetGroup[] = Object.entries(this.selectedFacets).map(
254
- ([key, selectedFacets]) => {
255
- const option = key as FacetOption;
256
- const title = facetTitles[option];
257
-
258
- const buckets: FacetBucket[] = Object.entries(selectedFacets).map(
259
- ([value, data]) => {
260
- const displayText: string = value;
261
- return {
262
- displayText,
263
- key: value,
264
- count: data?.count,
265
- state: data?.state,
266
- };
267
- }
268
- );
294
+ private get selectedFacetGroup(): FacetGroup | undefined {
295
+ if (!this.selectedFacets || !this.facetKey) return undefined;
296
+
297
+ const selectedFacetsForKey = this.selectedFacets[this.facetKey];
298
+ if (!selectedFacetsForKey) return undefined;
269
299
 
300
+ const facetGroupTitle = facetTitles[this.facetKey];
301
+
302
+ const buckets: FacetBucket[] = Object.entries(selectedFacetsForKey).map(
303
+ ([value, data]) => {
304
+ const displayText: string = value;
270
305
  return {
271
- title,
272
- key: option,
273
- buckets,
306
+ displayText,
307
+ key: value,
308
+ count: data?.count,
309
+ state: data?.state,
274
310
  };
275
311
  }
276
312
  );
277
313
 
278
- return facetGroups;
314
+ return {
315
+ title: facetGroupTitle,
316
+ key: this.facetKey,
317
+ buckets,
318
+ };
279
319
  }
280
320
 
281
321
  /**
282
- * Converts the raw `aggregations` to `FacetGroups`, which are easier to use
322
+ * Converts the raw `aggregations` for the current facet key to a `FacetGroup`,
323
+ * which is easier to work with.
283
324
  */
284
- private get aggregationFacetGroups(): FacetGroup[] {
285
- const facetGroups: FacetGroup[] = [];
286
- Object.entries(this.aggregations ?? []).forEach(([key, aggregation]) => {
287
- // the year_histogram data is in a different format so can't be handled here
288
- if (key === 'year_histogram') return;
289
-
290
- const option = key as FacetOption;
291
- this.facetGroupTitle = facetTitles[option];
292
-
293
- // sort facets in specific order
294
- let castedBuckets = aggregation.getSortedBuckets(
295
- this.sortedBy
296
- ) as Bucket[];
297
-
298
- if (option === 'collection') {
299
- // we are not showing fav- collections or certain deemphasized collections in facets
300
- castedBuckets = castedBuckets?.filter(bucket => {
301
- const bucketKey = bucket?.key?.toString();
302
- return (
303
- !suppressedCollections[bucketKey] && !bucketKey?.startsWith('fav-')
304
- );
305
- });
306
- }
325
+ private get aggregationFacetGroup(): FacetGroup | undefined {
326
+ if (!this.aggregations || !this.facetKey) return undefined;
307
327
 
308
- // find length and pagination size for modal pagination
309
- const { length } = Object.keys(castedBuckets as []);
310
- this.paginationSize = Math.ceil(length / this.facetsPerPage);
328
+ const currentAggregation = this.aggregations[this.facetKey];
329
+ if (!currentAggregation) return undefined;
311
330
 
312
- // render only items which will be visible as per this.facetsPerPage
313
- const bucketsMaxSix = castedBuckets?.slice(
314
- (this.pageNumber - 1) * this.facetsPerPage,
315
- this.pageNumber * this.facetsPerPage
316
- );
331
+ const facetGroupTitle = facetTitles[this.facetKey];
317
332
 
318
- const facetBucket: FacetBucket[] = bucketsMaxSix.map(bucket => {
319
- const bucketKey = bucket.key;
320
- return {
321
- displayText: `${bucket.key}`,
322
- key: `${bucketKey}`,
323
- count: bucket.doc_count,
324
- state: 'none',
325
- };
333
+ // Order the facets according to the current sort option
334
+ let sortedBuckets = currentAggregation.getSortedBuckets(
335
+ this.sortedBy
336
+ ) as Bucket[];
337
+
338
+ if (this.facetKey === 'collection') {
339
+ // we are not showing fav- collections or certain deemphasized collections in facets
340
+ sortedBuckets = sortedBuckets?.filter(bucket => {
341
+ const bucketKey = bucket?.key?.toString();
342
+ return (
343
+ !suppressedCollections[bucketKey] && !bucketKey?.startsWith('fav-')
344
+ );
326
345
  });
327
- const group: FacetGroup = {
328
- title: this.facetGroupTitle as string,
329
- key: option,
330
- buckets: facetBucket,
346
+ }
347
+
348
+ // Construct the array of facet buckets from the aggregation buckets
349
+ const facetBuckets: FacetBucket[] = sortedBuckets.map(bucket => {
350
+ const bucketKeyStr = `${bucket.key}`;
351
+ return {
352
+ displayText: `${bucketKeyStr}`,
353
+ key: `${bucketKeyStr}`,
354
+ count: bucket.doc_count,
355
+ state: 'none',
331
356
  };
332
- facetGroups.push(group);
333
357
  });
334
358
 
335
- return facetGroups;
359
+ return {
360
+ title: facetGroupTitle,
361
+ key: this.facetKey,
362
+ buckets: facetBuckets,
363
+ };
364
+ }
365
+
366
+ /**
367
+ * Returns a FacetGroup representing only the current page of facet buckets to show.
368
+ */
369
+ private get facetGroupForCurrentPage(): FacetGroup | undefined {
370
+ const { facetGroup } = this;
371
+ if (!facetGroup) return undefined;
372
+
373
+ // Slice out only the current page of facet buckets
374
+ const firstBucketIndexOnPage = (this.pageNumber - 1) * this.facetsPerPage;
375
+ const truncatedBuckets = facetGroup.buckets.slice(
376
+ firstBucketIndexOnPage,
377
+ firstBucketIndexOnPage + this.facetsPerPage
378
+ );
379
+
380
+ return {
381
+ ...facetGroup,
382
+ buckets: truncatedBuckets,
383
+ };
336
384
  }
337
385
 
338
- private get getMoreFacetsTemplate(): TemplateResult {
386
+ private get moreFacetsTemplate(): TemplateResult {
339
387
  return html`
340
388
  <facets-template
341
- .facetGroup=${this.mergedFacets?.shift()}
389
+ .facetGroup=${this.facetGroupForCurrentPage}
342
390
  .selectedFacets=${this.selectedFacets}
343
- .renderOn=${'modal'}
344
391
  .collectionTitles=${this.collectionTitles}
345
- @selectedFacetsChanged=${(e: CustomEvent) => {
346
- this.selectedFacets = e.detail;
392
+ @facetClick=${(e: CustomEvent<FacetEventDetails>) => {
393
+ if (this.facetKey) {
394
+ this.unappliedFacetChanges = updateSelectedFacetBucket(
395
+ this.unappliedFacetChanges,
396
+ this.facetKey,
397
+ e.detail.bucket
398
+ );
399
+ }
347
400
  }}
348
401
  ></facets-template>
349
402
  `;
@@ -355,6 +408,17 @@ export class MoreFacetsContent extends LitElement {
355
408
  </div> `;
356
409
  }
357
410
 
411
+ /**
412
+ * How many pages of facets to show in the modal pagination widget
413
+ */
414
+ private get paginationSize(): number {
415
+ if (!this.aggregations || !this.facetKey) return 0;
416
+
417
+ // Calculate the appropriate number of pages to show in the modal pagination widget
418
+ const length = this.aggregations[this.facetKey]?.buckets.length;
419
+ return Math.ceil(length / this.facetsPerPage);
420
+ }
421
+
358
422
  // render pagination if more then 1 page
359
423
  private get facetsPaginationTemplate() {
360
424
  return this.paginationSize > 1
@@ -397,24 +461,24 @@ export class MoreFacetsContent extends LitElement {
397
461
  );
398
462
  }
399
463
 
400
- private get getModalHeaderTemplate(): TemplateResult {
464
+ private get modalHeaderTemplate(): TemplateResult {
401
465
  const facetSort =
402
466
  this.sortedBy ?? defaultFacetSort[this.facetKey as FacetOption];
403
467
  const defaultSwitchSide =
404
468
  facetSort === AggregationSortType.COUNT ? 'left' : 'right';
405
469
 
406
- return html`<span class="sr-only">More facets for:</span>
470
+ return html`<span class="sr-only">${msg('More facets for:')}</span>
407
471
  <span class="title">
408
- ${this.facetGroupTitle}
472
+ ${this.facetGroup?.title}
409
473
 
410
- <label class="sort-label">Sort by:</label>
474
+ <label class="sort-label">${msg('Sort by:')}</label>
411
475
  ${this.facetKey
412
476
  ? html`<toggle-switch
413
477
  class="sort-toggle"
414
478
  leftValue=${AggregationSortType.COUNT}
415
479
  leftLabel="Count"
416
480
  rightValue=${valueFacetSort[this.facetKey]}
417
- rightLabel=${this.facetGroupTitle}
481
+ rightLabel=${this.facetGroup?.title}
418
482
  side=${defaultSwitchSide}
419
483
  @change=${(e: CustomEvent<string>) => {
420
484
  this.sortFacetAggregation(
@@ -432,8 +496,8 @@ export class MoreFacetsContent extends LitElement {
432
496
  ? this.loaderTemplate
433
497
  : html`
434
498
  <section id="more-facets">
435
- <div class="header-content">${this.getModalHeaderTemplate}</div>
436
- <div class="facets-content">${this.getMoreFacetsTemplate}</div>
499
+ <div class="header-content">${this.modalHeaderTemplate}</div>
500
+ <div class="facets-content">${this.moreFacetsTemplate}</div>
437
501
  ${this.footerTemplate}
438
502
  </section>
439
503
  `}
@@ -441,12 +505,21 @@ export class MoreFacetsContent extends LitElement {
441
505
  }
442
506
 
443
507
  private applySearchFacetsClicked() {
508
+ const mergedSelections = mergeSelectedFacets(
509
+ this.selectedFacets,
510
+ this.unappliedFacetChanges
511
+ );
512
+
444
513
  const event = new CustomEvent<SelectedFacets>('facetsChanged', {
445
- detail: this.selectedFacets,
514
+ detail: mergedSelections,
446
515
  bubbles: true,
447
516
  composed: true,
448
517
  });
449
518
  this.dispatchEvent(event);
519
+
520
+ // Reset the unapplied changes back to default, now that they have been applied
521
+ this.unappliedFacetChanges = getDefaultSelectedFacets();
522
+
450
523
  this.modalManager?.closeModal();
451
524
  this.analyticsHandler?.sendEvent({
452
525
  category: analyticsCategories.default,
@@ -470,18 +543,10 @@ export class MoreFacetsContent extends LitElement {
470
543
  return [
471
544
  srOnlyStyle,
472
545
  css`
473
- @media (max-width: 560px) {
474
- section#more-facets {
475
- max-height: 450px;
476
- }
477
- .facets-content {
478
- overflow-y: auto;
479
- height: 300px;
480
- }
481
- }
482
546
  section#more-facets {
483
547
  overflow: auto;
484
548
  padding: 10px; /* leaves room for scroll bar to appear without overlaying on content */
549
+ --facetsColumnCount: 3;
485
550
  }
486
551
  .header-content .title {
487
552
  display: block;
@@ -533,6 +598,17 @@ export class MoreFacetsContent extends LitElement {
533
598
  text-align: center;
534
599
  margin-top: 10px;
535
600
  }
601
+
602
+ @media (max-width: 560px) {
603
+ section#more-facets {
604
+ max-height: 450px;
605
+ --facetsColumnCount: 1;
606
+ }
607
+ .facets-content {
608
+ overflow-y: auto;
609
+ height: 300px;
610
+ }
611
+ }
536
612
  `,
537
613
  ];
538
614
  }
@@ -44,6 +44,7 @@ import {
44
44
  LendingFacetKey,
45
45
  suppressedCollections,
46
46
  defaultFacetSort,
47
+ FacetEventDetails,
47
48
  } from './models';
48
49
  import type {
49
50
  CollectionTitles,
@@ -59,6 +60,10 @@ import {
59
60
  } from './utils/analytics-events';
60
61
  import { srOnlyStyle } from './styles/sr-only';
61
62
  import { ExpandedDatePicker } from './expanded-date-picker';
63
+ import {
64
+ sortBucketsBySelectionState,
65
+ updateSelectedFacetBucket,
66
+ } from './utils/facet-utils';
62
67
 
63
68
  @customElement('collection-facets')
64
69
  export class CollectionFacets extends LitElement {
@@ -175,7 +180,6 @@ export class CollectionFacets extends LitElement {
175
180
  <section
176
181
  class="facet-group partof-collections"
177
182
  aria-labelledby=${headingId}
178
- data-testid="facet-group-partof-collections"
179
183
  >
180
184
  <div class="facet-group-header">
181
185
  <h3 id=${headingId}>${msg('Part Of')}</h3>
@@ -412,6 +416,9 @@ export class CollectionFacets extends LitElement {
412
416
  );
413
417
  }
414
418
 
419
+ // Sort the FacetBuckets so that selected and hidden buckets come before the rest
420
+ sortBucketsBySelectionState(bucketsWithCount);
421
+
415
422
  // For mediatype facets, ensure the collection bucket is always shown if present
416
423
  if (facetKey === 'mediatype') {
417
424
  const collectionIndex = bucketsWithCount.findIndex(
@@ -423,15 +430,18 @@ export class CollectionFacets extends LitElement {
423
430
  collectionIndex,
424
431
  1
425
432
  );
426
- bucketsWithCount.splice(allowedFacetCount - 1, 0, collectionBucket);
433
+
427
434
  // If we're showing lots of selected facets, ensure we're not cutting off the last one
428
- if (allowedFacetCount > this.allowedFacetCount)
435
+ if (allowedFacetCount > this.allowedFacetCount) {
429
436
  allowedFacetCount += 1;
437
+ }
438
+
439
+ bucketsWithCount.splice(allowedFacetCount - 1, 0, collectionBucket);
430
440
  }
431
441
  }
432
442
 
433
- // splice how many items we want to show in page facet area
434
- facetGroup.buckets = bucketsWithCount.splice(0, allowedFacetCount);
443
+ // slice off how many items we want to show in page facet area
444
+ facetGroup.buckets = bucketsWithCount.slice(0, allowedFacetCount);
435
445
 
436
446
  facetGroups.push(facetGroup);
437
447
  });
@@ -558,7 +568,6 @@ export class CollectionFacets extends LitElement {
558
568
  <section
559
569
  class="facet-group ${this.collapsableFacets ? 'mobile' : ''}"
560
570
  aria-labelledby=${headerId}
561
- data-testid=${headerId}
562
571
  >
563
572
  <div class="facet-group-header">
564
573
  <h3
@@ -640,13 +649,10 @@ export class CollectionFacets extends LitElement {
640
649
  facetGroup: FacetGroup,
641
650
  sortedBy: AggregationSortType
642
651
  ): Promise<void> {
643
- const facetAggrKey = facetGroup.key;
644
-
645
652
  const customModalContent = html`
646
653
  <more-facets-content
647
654
  .analyticsHandler=${this.analyticsHandler}
648
655
  .facetKey=${facetGroup.key}
649
- .facetAggregationKey=${facetAggrKey}
650
656
  .query=${this.query}
651
657
  .filterMap=${this.filterMap}
652
658
  .pageSpecifierParams=${this.pageSpecifierParams}
@@ -694,11 +700,17 @@ export class CollectionFacets extends LitElement {
694
700
  .collectionPagePath=${this.collectionPagePath}
695
701
  .facetGroup=${facetGroup}
696
702
  .selectedFacets=${this.selectedFacets}
697
- .renderOn=${'page'}
698
703
  .collectionTitles=${this.collectionTitles}
699
- @selectedFacetsChanged=${(e: CustomEvent) => {
704
+ @facetClick=${(e: CustomEvent<FacetEventDetails>) => {
705
+ this.selectedFacets = updateSelectedFacetBucket(
706
+ this.selectedFacets,
707
+ facetGroup.key,
708
+ e.detail.bucket,
709
+ true
710
+ );
711
+
700
712
  const event = new CustomEvent<SelectedFacets>('facetsChanged', {
701
- detail: e.detail,
713
+ detail: this.selectedFacets,
702
714
  bubbles: true,
703
715
  composed: true,
704
716
  });