@internetarchive/collection-browser 2.7.12-alpha-webdev7322.5 → 2.7.12-alpha-webdev7262.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 (320) 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 +13 -13
  6. package/dist/index.js +13 -13
  7. package/dist/src/app-root.d.ts +107 -107
  8. package/dist/src/app-root.js +531 -531
  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/filter.d.ts +2 -2
  30. package/dist/src/assets/img/icons/filter.js +2 -2
  31. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  32. package/dist/src/assets/img/icons/login-required.js +2 -2
  33. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  34. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  35. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  36. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  37. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  38. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  39. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  40. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  41. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  42. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  43. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  44. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  45. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  46. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  47. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  48. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  49. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  50. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  51. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  52. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  53. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  54. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  55. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  56. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  57. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  58. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  59. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  60. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  61. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  62. package/dist/src/assets/img/icons/null-result.js +2 -2
  63. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  64. package/dist/src/assets/img/icons/restricted.js +2 -2
  65. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  66. package/dist/src/assets/img/icons/reviews.js +2 -2
  67. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  68. package/dist/src/assets/img/icons/upload.js +2 -2
  69. package/dist/src/assets/img/icons/views.d.ts +1 -1
  70. package/dist/src/assets/img/icons/views.js +2 -2
  71. package/dist/src/circular-activity-indicator.d.ts +5 -5
  72. package/dist/src/circular-activity-indicator.js +17 -17
  73. package/dist/src/collection-browser.d.ts +606 -606
  74. package/dist/src/collection-browser.js +1679 -1677
  75. package/dist/src/collection-browser.js.map +1 -1
  76. package/dist/src/collection-facets/facet-row.d.ts +30 -30
  77. package/dist/src/collection-facets/facet-row.js +118 -118
  78. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  79. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  80. package/dist/src/collection-facets/facets-template.d.ts +13 -13
  81. package/dist/src/collection-facets/facets-template.js +44 -44
  82. package/dist/src/collection-facets/more-facets-content.d.ts +106 -106
  83. package/dist/src/collection-facets/more-facets-content.js +407 -407
  84. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  85. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  86. package/dist/src/collection-facets/smart-facets/dedupe.d.ts +10 -10
  87. package/dist/src/collection-facets/smart-facets/dedupe.js +33 -33
  88. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.d.ts +5 -5
  89. package/dist/src/collection-facets/smart-facets/heuristics/browser-language-heuristic.js +23 -23
  90. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.d.ts +5 -5
  91. package/dist/src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.js +44 -44
  92. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.d.ts +5 -5
  93. package/dist/src/collection-facets/smart-facets/heuristics/wikidata-heuristic.js +172 -172
  94. package/dist/src/collection-facets/smart-facets/models.d.ts +26 -26
  95. package/dist/src/collection-facets/smart-facets/models.js +1 -1
  96. package/dist/src/collection-facets/smart-facets/smart-facet-bar.d.ts +31 -31
  97. package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +240 -240
  98. package/dist/src/collection-facets/smart-facets/smart-facet-button.d.ts +11 -11
  99. package/dist/src/collection-facets/smart-facets/smart-facet-button.js +86 -86
  100. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.d.ts +16 -16
  101. package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +100 -100
  102. package/dist/src/collection-facets/smart-facets/smart-facet-equals.d.ts +2 -2
  103. package/dist/src/collection-facets/smart-facets/smart-facet-equals.js +12 -12
  104. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.d.ts +5 -5
  105. package/dist/src/collection-facets/smart-facets/smart-facet-heuristics.js +15 -15
  106. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  107. package/dist/src/collection-facets/toggle-switch.js +94 -94
  108. package/dist/src/collection-facets.d.ts +103 -103
  109. package/dist/src/collection-facets.js +522 -522
  110. package/dist/src/data-source/collection-browser-data-source-interface.d.ts +245 -245
  111. package/dist/src/data-source/collection-browser-data-source-interface.js +1 -1
  112. package/dist/src/data-source/collection-browser-data-source.d.ts +377 -377
  113. package/dist/src/data-source/collection-browser-data-source.js +1011 -1001
  114. package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
  115. package/dist/src/data-source/collection-browser-query-state.d.ts +44 -44
  116. package/dist/src/data-source/collection-browser-query-state.js +1 -1
  117. package/dist/src/data-source/models.d.ts +28 -28
  118. package/dist/src/data-source/models.js +8 -8
  119. package/dist/src/empty-placeholder.d.ts +23 -23
  120. package/dist/src/empty-placeholder.js +79 -79
  121. package/dist/src/expanded-date-picker.d.ts +43 -43
  122. package/dist/src/expanded-date-picker.js +109 -109
  123. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  124. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  125. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  126. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  127. package/dist/src/manage/manage-bar.d.ts +58 -58
  128. package/dist/src/manage/manage-bar.js +159 -159
  129. package/dist/src/manage/remove-items-modal-content.d.ts +9 -9
  130. package/dist/src/manage/remove-items-modal-content.js +34 -34
  131. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  132. package/dist/src/mediatype/mediatype-config.js +91 -91
  133. package/dist/src/models.d.ts +228 -228
  134. package/dist/src/models.js +401 -401
  135. package/dist/src/restoration-state-handler.d.ts +70 -70
  136. package/dist/src/restoration-state-handler.js +363 -363
  137. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  138. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  139. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  140. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  141. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  142. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  143. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  144. package/dist/src/sort-filter-bar/img/list.js +2 -2
  145. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  146. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  147. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  148. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  149. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  150. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  151. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  152. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  153. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  154. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  155. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +223 -223
  156. package/dist/src/sort-filter-bar/sort-filter-bar.js +697 -697
  157. package/dist/src/styles/ia-button.d.ts +2 -2
  158. package/dist/src/styles/ia-button.js +17 -17
  159. package/dist/src/styles/item-image-styles.d.ts +8 -8
  160. package/dist/src/styles/item-image-styles.js +9 -9
  161. package/dist/src/styles/sr-only.d.ts +1 -1
  162. package/dist/src/styles/sr-only.js +2 -2
  163. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  164. package/dist/src/tiles/base-tile-component.js +64 -64
  165. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  166. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  167. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  168. package/dist/src/tiles/grid/account-tile.js +72 -72
  169. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  170. package/dist/src/tiles/grid/collection-tile.js +80 -80
  171. package/dist/src/tiles/grid/item-tile.d.ts +34 -34
  172. package/dist/src/tiles/grid/item-tile.js +158 -158
  173. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  174. package/dist/src/tiles/grid/search-tile.js +51 -51
  175. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  176. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  177. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  178. package/dist/src/tiles/grid/tile-stats.js +53 -53
  179. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  180. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  181. package/dist/src/tiles/hover/tile-hover-pane.d.ts +18 -18
  182. package/dist/src/tiles/hover/tile-hover-pane.js +69 -69
  183. package/dist/src/tiles/image-block.d.ts +18 -18
  184. package/dist/src/tiles/image-block.js +89 -89
  185. package/dist/src/tiles/item-image.d.ts +39 -39
  186. package/dist/src/tiles/item-image.js +154 -154
  187. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  188. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  189. package/dist/src/tiles/list/tile-list-compact.d.ts +19 -19
  190. package/dist/src/tiles/list/tile-list-compact.js +122 -122
  191. package/dist/src/tiles/list/tile-list.d.ts +54 -54
  192. package/dist/src/tiles/list/tile-list.js +323 -323
  193. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  194. package/dist/src/tiles/mediatype-icon.js +47 -47
  195. package/dist/src/tiles/overlay/icon-overlay.d.ts +8 -8
  196. package/dist/src/tiles/overlay/icon-overlay.js +25 -25
  197. package/dist/src/tiles/overlay/text-overlay.d.ts +9 -9
  198. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  199. package/dist/src/tiles/review-block.d.ts +12 -12
  200. package/dist/src/tiles/review-block.js +56 -56
  201. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  202. package/dist/src/tiles/text-snippet-block.js +73 -73
  203. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  204. package/dist/src/tiles/tile-dispatcher.js +230 -230
  205. package/dist/src/tiles/tile-display-value-provider.d.ts +47 -47
  206. package/dist/src/tiles/tile-display-value-provider.js +94 -94
  207. package/dist/src/utils/analytics-events.d.ts +28 -28
  208. package/dist/src/utils/analytics-events.js +30 -30
  209. package/dist/src/utils/array-equals.d.ts +4 -4
  210. package/dist/src/utils/array-equals.js +10 -10
  211. package/dist/src/utils/collapse-repeated-quotes.d.ts +11 -11
  212. package/dist/src/utils/collapse-repeated-quotes.js +13 -13
  213. package/dist/src/utils/facet-utils.d.ts +83 -83
  214. package/dist/src/utils/facet-utils.js +145 -145
  215. package/dist/src/utils/format-count.d.ts +7 -7
  216. package/dist/src/utils/format-count.js +76 -76
  217. package/dist/src/utils/format-date.d.ts +2 -2
  218. package/dist/src/utils/format-date.js +27 -27
  219. package/dist/src/utils/format-unit-size.d.ts +2 -2
  220. package/dist/src/utils/format-unit-size.js +33 -33
  221. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  222. package/dist/src/utils/local-date-from-utc.js +15 -15
  223. package/dist/src/utils/log.d.ts +7 -7
  224. package/dist/src/utils/log.js +15 -15
  225. package/dist/src/utils/resolve-mediatype.d.ts +8 -8
  226. package/dist/src/utils/resolve-mediatype.js +23 -23
  227. package/dist/src/utils/sha1.d.ts +2 -2
  228. package/dist/src/utils/sha1.js +8 -8
  229. package/dist/test/collection-browser.test.d.ts +1 -1
  230. package/dist/test/collection-browser.test.js +1308 -1308
  231. package/dist/test/collection-facets/facet-row.test.d.ts +1 -1
  232. package/dist/test/collection-facets/facet-row.test.js +227 -227
  233. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  234. package/dist/test/collection-facets/facets-template.test.js +91 -91
  235. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  236. package/dist/test/collection-facets/more-facets-content.test.js +141 -141
  237. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  238. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  239. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  240. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  241. package/dist/test/collection-facets.test.d.ts +2 -2
  242. package/dist/test/collection-facets.test.js +690 -690
  243. package/dist/test/data-source/collection-browser-data-source.test.d.ts +1 -1
  244. package/dist/test/data-source/collection-browser-data-source.test.js +89 -89
  245. package/dist/test/empty-placeholder.test.d.ts +1 -1
  246. package/dist/test/empty-placeholder.test.js +63 -63
  247. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  248. package/dist/test/expanded-date-picker.test.js +95 -95
  249. package/dist/test/icon-overlay.test.d.ts +1 -1
  250. package/dist/test/icon-overlay.test.js +24 -24
  251. package/dist/test/image-block.test.d.ts +1 -1
  252. package/dist/test/image-block.test.js +107 -107
  253. package/dist/test/item-image.test.d.ts +1 -1
  254. package/dist/test/item-image.test.js +85 -85
  255. package/dist/test/manage/manage-bar.test.d.ts +2 -2
  256. package/dist/test/manage/manage-bar.test.js +100 -100
  257. package/dist/test/manage/remove-items-modal-content.test.d.ts +1 -1
  258. package/dist/test/manage/remove-items-modal-content.test.js +45 -45
  259. package/dist/test/mediatype-config.test.d.ts +1 -1
  260. package/dist/test/mediatype-config.test.js +16 -16
  261. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  262. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  263. package/dist/test/mocks/mock-search-responses.d.ts +25 -25
  264. package/dist/test/mocks/mock-search-responses.js +942 -942
  265. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  266. package/dist/test/mocks/mock-search-service.js +54 -54
  267. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  268. package/dist/test/restoration-state-handler.test.js +270 -270
  269. package/dist/test/review-block.test.d.ts +1 -1
  270. package/dist/test/review-block.test.js +44 -44
  271. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  272. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  273. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  274. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  275. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  276. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +426 -426
  277. package/dist/test/text-overlay.test.d.ts +1 -1
  278. package/dist/test/text-overlay.test.js +38 -38
  279. package/dist/test/text-snippet-block.test.d.ts +1 -1
  280. package/dist/test/text-snippet-block.test.js +57 -57
  281. package/dist/test/tile-stats.test.d.ts +1 -1
  282. package/dist/test/tile-stats.test.js +81 -81
  283. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  284. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  285. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  286. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  287. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  288. package/dist/test/tiles/grid/item-tile.test.js +312 -312
  289. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  290. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  291. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  292. package/dist/test/tiles/hover/hover-pane-controller.test.js +259 -259
  293. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  294. package/dist/test/tiles/hover/tile-hover-pane.test.js +56 -56
  295. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  296. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  297. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  298. package/dist/test/tiles/list/tile-list.test.js +297 -297
  299. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  300. package/dist/test/tiles/tile-dispatcher.test.js +100 -100
  301. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  302. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  303. package/dist/test/utils/array-equals.test.d.ts +1 -1
  304. package/dist/test/utils/array-equals.test.js +26 -26
  305. package/dist/test/utils/format-count.test.d.ts +1 -1
  306. package/dist/test/utils/format-count.test.js +23 -23
  307. package/dist/test/utils/format-date.test.d.ts +1 -1
  308. package/dist/test/utils/format-date.test.js +30 -30
  309. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  310. package/dist/test/utils/format-unit-size.test.js +17 -17
  311. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  312. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  313. package/local.archive.org.cert +86 -86
  314. package/local.archive.org.key +27 -27
  315. package/package.json +1 -1
  316. package/renovate.json +6 -6
  317. package/src/collection-browser.ts +2 -0
  318. package/src/data-source/collection-browser-data-source.ts +12 -1
  319. package/web-dev-server.config.mjs +30 -30
  320. package/web-test-runner.config.mjs +41 -41
@@ -1,271 +1,271 @@
1
- import { SearchType } from '@internetarchive/search-service';
2
- import { expect } from '@open-wc/testing';
3
- import { SortField, getDefaultSelectedFacets } from '../src/models';
4
- import { RestorationStateHandler } from '../src/restoration-state-handler';
5
- describe('Restoration state handler', () => {
6
- it('should restore query from URL', async () => {
7
- const handler = new RestorationStateHandler({ context: 'search' });
8
- const url = new URL(window.location.href);
9
- url.search = '?query=boop';
10
- window.history.replaceState({ path: url.href }, '', url.href);
11
- const restorationState = handler.getRestorationState();
12
- expect(restorationState.baseQuery).to.equal('boop');
13
- });
14
- it('should restore metadata search type from URL without valid sin', async () => {
15
- const handler = new RestorationStateHandler({ context: 'search' });
16
- const url = new URL(window.location.href);
17
- url.search = '?sin=foo';
18
- window.history.replaceState({ path: url.href }, '', url.href);
19
- const restorationState = handler.getRestorationState();
20
- expect(restorationState.searchType).to.equal(SearchType.METADATA);
21
- });
22
- it('should restore metadata search type if sin explicitly empty in URL', async () => {
23
- const handler = new RestorationStateHandler({ context: 'search' });
24
- const url = new URL(window.location.href);
25
- url.search = '?sin=';
26
- window.history.replaceState({ path: url.href }, '', url.href);
27
- const restorationState = handler.getRestorationState();
28
- expect(restorationState.searchType).to.equal(SearchType.METADATA);
29
- });
30
- it('should restore full text search type from URL', async () => {
31
- const handler = new RestorationStateHandler({ context: 'search' });
32
- const url = new URL(window.location.href);
33
- url.search = '?sin=TXT';
34
- window.history.replaceState({ path: url.href }, '', url.href);
35
- const restorationState = handler.getRestorationState();
36
- expect(restorationState.searchType).to.equal(SearchType.FULLTEXT);
37
- });
38
- it('should restore page number from URL', async () => {
39
- const handler = new RestorationStateHandler({ context: 'search' });
40
- const url = new URL(window.location.href);
41
- url.search = '?page=42';
42
- window.history.replaceState({ path: url.href }, '', url.href);
43
- const restorationState = handler.getRestorationState();
44
- expect(restorationState.currentPage).to.equal(42);
45
- });
46
- it('should restore selected year facets from URL', async () => {
47
- const handler = new RestorationStateHandler({ context: 'search' });
48
- const url = new URL(window.location.href);
49
- url.search = '?and[]=year:"2018"';
50
- window.history.replaceState({ path: url.href }, '', url.href);
51
- const restorationState = handler.getRestorationState();
52
- expect(restorationState.selectedFacets.year['2018'].state).to.equal('selected');
53
- });
54
- it('should ignore unrecognized facet types in URL', async () => {
55
- const handler = new RestorationStateHandler({ context: 'search' });
56
- const url = new URL(window.location.href);
57
- url.search = '?and[]=foo:"bar"';
58
- window.history.replaceState({ path: url.href }, '', url.href);
59
- const restorationState = handler.getRestorationState();
60
- expect(restorationState.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
61
- });
62
- it('should restore selected date range facets from URL', async () => {
63
- const handler = new RestorationStateHandler({ context: 'search' });
64
- const url = new URL(window.location.href);
65
- url.search = '?and[]=year:"2018+TO+2021"';
66
- window.history.replaceState({ path: url.href }, '', url.href);
67
- const restorationState = handler.getRestorationState();
68
- expect(restorationState.minSelectedDate).to.equal('2018');
69
- expect(restorationState.maxSelectedDate).to.equal('2021');
70
- });
71
- it('should restore creator filter from URL', async () => {
72
- const handler = new RestorationStateHandler({ context: 'search' });
73
- const url = new URL(window.location.href);
74
- url.search = '?and[]=firstCreator:F';
75
- window.history.replaceState({ path: url.href }, '', url.href);
76
- const restorationState = handler.getRestorationState();
77
- expect(restorationState.selectedCreatorFilter).to.equal('F');
78
- });
79
- it('should restore title filter from URL', async () => {
80
- const handler = new RestorationStateHandler({ context: 'search' });
81
- const url = new URL(window.location.href);
82
- url.search = '?and[]=firstTitle:F';
83
- window.history.replaceState({ path: url.href }, '', url.href);
84
- const restorationState = handler.getRestorationState();
85
- expect(restorationState.selectedTitleFilter).to.equal('F');
86
- });
87
- it('should restore other selected facets from URL', async () => {
88
- const handler = new RestorationStateHandler({ context: 'search' });
89
- const url = new URL(window.location.href);
90
- url.search = '?and[]=subject:"foo"';
91
- window.history.replaceState({ path: url.href }, '', url.href);
92
- const restorationState = handler.getRestorationState();
93
- expect(restorationState.selectedFacets.subject.foo.state).to.equal('selected');
94
- });
95
- it('should restore negative facets from URL', async () => {
96
- const handler = new RestorationStateHandler({ context: 'search' });
97
- const url = new URL(window.location.href);
98
- url.search = '?not[]=year:2018';
99
- window.history.replaceState({ path: url.href }, '', url.href);
100
- const restorationState = handler.getRestorationState();
101
- expect(restorationState.selectedFacets.year['2018'].state).to.equal('hidden');
102
- });
103
- it('should restore multiple selected/negative facets from URL', async () => {
104
- const handler = new RestorationStateHandler({ context: 'search' });
105
- const url = new URL(window.location.href);
106
- url.search =
107
- '?and[]=collection:"foo"&and[]=collection:"bar"&not[]=collection:"baz"&not[]=collection:"boop"';
108
- window.history.replaceState({ path: url.href }, '', url.href);
109
- const restorationState = handler.getRestorationState();
110
- expect(restorationState.selectedFacets.collection.foo.state).to.equal('selected');
111
- expect(restorationState.selectedFacets.collection.bar.state).to.equal('selected');
112
- expect(restorationState.selectedFacets.collection.baz.state).to.equal('hidden');
113
- expect(restorationState.selectedFacets.collection.boop.state).to.equal('hidden');
114
- });
115
- it('negative facets take precedence if both present in URL', async () => {
116
- const handler = new RestorationStateHandler({ context: 'search' });
117
- const url = new URL(window.location.href);
118
- url.search = '?and[]=collection:"foo"&not[]=collection:"foo"';
119
- window.history.replaceState({ path: url.href }, '', url.href);
120
- const restorationState = handler.getRestorationState();
121
- expect(restorationState.selectedFacets.collection.foo.state).to.equal('hidden');
122
- });
123
- it('should restore selected facets with numbers in the square brackets', async () => {
124
- const handler = new RestorationStateHandler({ context: 'search' });
125
- const url = new URL(window.location.href);
126
- url.search = '?and[12]=subject:"foo"';
127
- window.history.replaceState({ path: url.href }, '', url.href);
128
- const restorationState = handler.getRestorationState();
129
- expect(restorationState.selectedFacets.subject.foo.state).to.equal('selected');
130
- });
131
- it('should restore negative facets with numbers in the square brackets', async () => {
132
- const handler = new RestorationStateHandler({ context: 'search' });
133
- const url = new URL(window.location.href);
134
- url.search = '?not[12]=year:2018';
135
- window.history.replaceState({ path: url.href }, '', url.href);
136
- const restorationState = handler.getRestorationState();
137
- expect(restorationState.selectedFacets.year['2018'].state).to.equal('hidden');
138
- });
139
- it('should restore sort from URL (space format)', async () => {
140
- const handler = new RestorationStateHandler({ context: 'search' });
141
- const url = new URL(window.location.href);
142
- url.search = '?sort=date+desc';
143
- window.history.replaceState({ path: url.href }, '', url.href);
144
- const restorationState = handler.getRestorationState();
145
- expect(restorationState.selectedSort).to.equal('date');
146
- expect(restorationState.sortDirection).to.equal('desc');
147
- });
148
- it('should restore sort from URL (prefix format, desc)', async () => {
149
- const handler = new RestorationStateHandler({ context: 'search' });
150
- const url = new URL(window.location.href);
151
- url.search = '?sort=-date';
152
- window.history.replaceState({ path: url.href }, '', url.href);
153
- const restorationState = handler.getRestorationState();
154
- expect(restorationState.selectedSort).to.equal('date');
155
- expect(restorationState.sortDirection).to.equal('desc');
156
- });
157
- it('should restore sort from URL (prefix format, asc)', async () => {
158
- const handler = new RestorationStateHandler({ context: 'search' });
159
- const url = new URL(window.location.href);
160
- url.search = '?sort=date';
161
- window.history.replaceState({ path: url.href }, '', url.href);
162
- const restorationState = handler.getRestorationState();
163
- expect(restorationState.selectedSort).to.equal('date');
164
- expect(restorationState.sortDirection).to.equal('asc');
165
- });
166
- it('should restore sort from URL (space format)', async () => {
167
- const handler = new RestorationStateHandler({ context: 'search' });
168
- const url = new URL(window.location.href);
169
- url.search = '?sort=foo+desc';
170
- window.history.replaceState({ path: url.href }, '', url.href);
171
- const restorationState = handler.getRestorationState();
172
- expect(restorationState.selectedSort).to.equal('unrecognized');
173
- expect(restorationState.sortDirection).to.equal('desc');
174
- });
175
- it('should restore unrecognized sort from URL (prefix format)', async () => {
176
- const handler = new RestorationStateHandler({ context: 'search' });
177
- const url = new URL(window.location.href);
178
- url.search = '?sort=-foo';
179
- window.history.replaceState({ path: url.href }, '', url.href);
180
- const restorationState = handler.getRestorationState();
181
- expect(restorationState.selectedSort).to.equal('unrecognized');
182
- expect(restorationState.sortDirection).to.equal('desc');
183
- });
184
- it('should save direction to URL even for unrecognized sort fields', async () => {
185
- const url = new URL(window.location.href);
186
- url.search = '?sort=foo';
187
- window.history.replaceState({ path: url.href }, '', url.href);
188
- const handler = new RestorationStateHandler({ context: 'search' });
189
- handler.persistState({
190
- selectedSort: SortField.unrecognized,
191
- sortDirection: 'desc',
192
- selectedFacets: getDefaultSelectedFacets(),
193
- });
194
- expect(window.location.search).to.equal('?sort=-foo');
195
- });
196
- it('should keep existing direction for unrecognized sort fields when unspecified in state', async () => {
197
- const url = new URL(window.location.href);
198
- url.search = '?sort=foo+desc';
199
- window.history.replaceState({ path: url.href }, '', url.href);
200
- const handler = new RestorationStateHandler({ context: 'search' });
201
- handler.persistState({
202
- selectedSort: SortField.unrecognized,
203
- selectedFacets: getDefaultSelectedFacets(),
204
- });
205
- expect(window.location.search).to.equal('?sort=-foo');
206
- });
207
- it('should just ignore unrecognized sort fields w/ unknown formats', async () => {
208
- const url = new URL(window.location.href);
209
- url.search = '?sort=+foo';
210
- window.history.replaceState({ path: url.href }, '', url.href);
211
- const handler = new RestorationStateHandler({ context: 'search' });
212
- handler.persistState({
213
- selectedSort: SortField.unrecognized,
214
- selectedFacets: getDefaultSelectedFacets(),
215
- });
216
- expect(window.location.search).to.equal('?sort=+foo');
217
- });
218
- it('should not save current page state to the URL for page 1', async () => {
219
- const url = new URL(window.location.href);
220
- url.search = '';
221
- window.history.replaceState({ path: url.href }, '', url.href);
222
- const handler = new RestorationStateHandler({ context: 'search' });
223
- handler.persistState({
224
- currentPage: 1,
225
- selectedFacets: getDefaultSelectedFacets(),
226
- });
227
- expect(window.location.search).to.be.empty;
228
- });
229
- it('should save current page state to the URL when page > 1', async () => {
230
- const url = new URL(window.location.href);
231
- url.search = '';
232
- window.history.replaceState({ path: url.href }, '', url.href);
233
- const handler = new RestorationStateHandler({ context: 'search' });
234
- handler.persistState({
235
- currentPage: 2,
236
- selectedFacets: getDefaultSelectedFacets(),
237
- });
238
- expect(window.location.search).to.equal('?page=2');
239
- });
240
- it('should upgrade legacy search params to new ones', async () => {
241
- const url = new URL(window.location.href);
242
- url.search = '?q=foo';
243
- window.history.replaceState({ path: url.href }, '', url.href);
244
- const handler = new RestorationStateHandler({ context: 'search' });
245
- const restorationState = handler.getRestorationState();
246
- expect(restorationState.baseQuery).to.equal('foo');
247
- handler.persistState(restorationState);
248
- expect(window.location.search).to.equal('?query=foo');
249
- });
250
- it('should remove empty sin param', async () => {
251
- const url = new URL(window.location.href);
252
- url.search = '?sin=';
253
- window.history.replaceState({ path: url.href }, '', url.href);
254
- const handler = new RestorationStateHandler({ context: 'search' });
255
- handler.persistState({ selectedFacets: getDefaultSelectedFacets() });
256
- expect(window.location.search).to.equal('');
257
- });
258
- it('round trip load/persist should erase numbers in square brackets', async () => {
259
- const handler = new RestorationStateHandler({ context: 'search' });
260
- const url = new URL(window.location.href);
261
- url.search = '?and[0]=subject:"foo"';
262
- window.history.replaceState({ path: url.href }, '', url.href);
263
- // Load state from the URL and immediately persist it back to the URL
264
- const restorationState = handler.getRestorationState();
265
- handler.persistState(restorationState);
266
- // Ensure the new URL includes the "normalized" facet parameter and not the numbered one
267
- expect(decodeURIComponent(window.location.search)).to.include('and[]=subject:"foo"');
268
- expect(new URL(window.location.href).searchParams.get('and[0]')).to.be.null;
269
- });
270
- });
1
+ import { SearchType } from '@internetarchive/search-service';
2
+ import { expect } from '@open-wc/testing';
3
+ import { SortField, getDefaultSelectedFacets } from '../src/models';
4
+ import { RestorationStateHandler } from '../src/restoration-state-handler';
5
+ describe('Restoration state handler', () => {
6
+ it('should restore query from URL', async () => {
7
+ const handler = new RestorationStateHandler({ context: 'search' });
8
+ const url = new URL(window.location.href);
9
+ url.search = '?query=boop';
10
+ window.history.replaceState({ path: url.href }, '', url.href);
11
+ const restorationState = handler.getRestorationState();
12
+ expect(restorationState.baseQuery).to.equal('boop');
13
+ });
14
+ it('should restore metadata search type from URL without valid sin', async () => {
15
+ const handler = new RestorationStateHandler({ context: 'search' });
16
+ const url = new URL(window.location.href);
17
+ url.search = '?sin=foo';
18
+ window.history.replaceState({ path: url.href }, '', url.href);
19
+ const restorationState = handler.getRestorationState();
20
+ expect(restorationState.searchType).to.equal(SearchType.METADATA);
21
+ });
22
+ it('should restore metadata search type if sin explicitly empty in URL', async () => {
23
+ const handler = new RestorationStateHandler({ context: 'search' });
24
+ const url = new URL(window.location.href);
25
+ url.search = '?sin=';
26
+ window.history.replaceState({ path: url.href }, '', url.href);
27
+ const restorationState = handler.getRestorationState();
28
+ expect(restorationState.searchType).to.equal(SearchType.METADATA);
29
+ });
30
+ it('should restore full text search type from URL', async () => {
31
+ const handler = new RestorationStateHandler({ context: 'search' });
32
+ const url = new URL(window.location.href);
33
+ url.search = '?sin=TXT';
34
+ window.history.replaceState({ path: url.href }, '', url.href);
35
+ const restorationState = handler.getRestorationState();
36
+ expect(restorationState.searchType).to.equal(SearchType.FULLTEXT);
37
+ });
38
+ it('should restore page number from URL', async () => {
39
+ const handler = new RestorationStateHandler({ context: 'search' });
40
+ const url = new URL(window.location.href);
41
+ url.search = '?page=42';
42
+ window.history.replaceState({ path: url.href }, '', url.href);
43
+ const restorationState = handler.getRestorationState();
44
+ expect(restorationState.currentPage).to.equal(42);
45
+ });
46
+ it('should restore selected year facets from URL', async () => {
47
+ const handler = new RestorationStateHandler({ context: 'search' });
48
+ const url = new URL(window.location.href);
49
+ url.search = '?and[]=year:"2018"';
50
+ window.history.replaceState({ path: url.href }, '', url.href);
51
+ const restorationState = handler.getRestorationState();
52
+ expect(restorationState.selectedFacets.year['2018'].state).to.equal('selected');
53
+ });
54
+ it('should ignore unrecognized facet types in URL', async () => {
55
+ const handler = new RestorationStateHandler({ context: 'search' });
56
+ const url = new URL(window.location.href);
57
+ url.search = '?and[]=foo:"bar"';
58
+ window.history.replaceState({ path: url.href }, '', url.href);
59
+ const restorationState = handler.getRestorationState();
60
+ expect(restorationState.selectedFacets).to.deep.equal(getDefaultSelectedFacets());
61
+ });
62
+ it('should restore selected date range facets from URL', async () => {
63
+ const handler = new RestorationStateHandler({ context: 'search' });
64
+ const url = new URL(window.location.href);
65
+ url.search = '?and[]=year:"2018+TO+2021"';
66
+ window.history.replaceState({ path: url.href }, '', url.href);
67
+ const restorationState = handler.getRestorationState();
68
+ expect(restorationState.minSelectedDate).to.equal('2018');
69
+ expect(restorationState.maxSelectedDate).to.equal('2021');
70
+ });
71
+ it('should restore creator filter from URL', async () => {
72
+ const handler = new RestorationStateHandler({ context: 'search' });
73
+ const url = new URL(window.location.href);
74
+ url.search = '?and[]=firstCreator:F';
75
+ window.history.replaceState({ path: url.href }, '', url.href);
76
+ const restorationState = handler.getRestorationState();
77
+ expect(restorationState.selectedCreatorFilter).to.equal('F');
78
+ });
79
+ it('should restore title filter from URL', async () => {
80
+ const handler = new RestorationStateHandler({ context: 'search' });
81
+ const url = new URL(window.location.href);
82
+ url.search = '?and[]=firstTitle:F';
83
+ window.history.replaceState({ path: url.href }, '', url.href);
84
+ const restorationState = handler.getRestorationState();
85
+ expect(restorationState.selectedTitleFilter).to.equal('F');
86
+ });
87
+ it('should restore other selected facets from URL', async () => {
88
+ const handler = new RestorationStateHandler({ context: 'search' });
89
+ const url = new URL(window.location.href);
90
+ url.search = '?and[]=subject:"foo"';
91
+ window.history.replaceState({ path: url.href }, '', url.href);
92
+ const restorationState = handler.getRestorationState();
93
+ expect(restorationState.selectedFacets.subject.foo.state).to.equal('selected');
94
+ });
95
+ it('should restore negative facets from URL', async () => {
96
+ const handler = new RestorationStateHandler({ context: 'search' });
97
+ const url = new URL(window.location.href);
98
+ url.search = '?not[]=year:2018';
99
+ window.history.replaceState({ path: url.href }, '', url.href);
100
+ const restorationState = handler.getRestorationState();
101
+ expect(restorationState.selectedFacets.year['2018'].state).to.equal('hidden');
102
+ });
103
+ it('should restore multiple selected/negative facets from URL', async () => {
104
+ const handler = new RestorationStateHandler({ context: 'search' });
105
+ const url = new URL(window.location.href);
106
+ url.search =
107
+ '?and[]=collection:"foo"&and[]=collection:"bar"&not[]=collection:"baz"&not[]=collection:"boop"';
108
+ window.history.replaceState({ path: url.href }, '', url.href);
109
+ const restorationState = handler.getRestorationState();
110
+ expect(restorationState.selectedFacets.collection.foo.state).to.equal('selected');
111
+ expect(restorationState.selectedFacets.collection.bar.state).to.equal('selected');
112
+ expect(restorationState.selectedFacets.collection.baz.state).to.equal('hidden');
113
+ expect(restorationState.selectedFacets.collection.boop.state).to.equal('hidden');
114
+ });
115
+ it('negative facets take precedence if both present in URL', async () => {
116
+ const handler = new RestorationStateHandler({ context: 'search' });
117
+ const url = new URL(window.location.href);
118
+ url.search = '?and[]=collection:"foo"&not[]=collection:"foo"';
119
+ window.history.replaceState({ path: url.href }, '', url.href);
120
+ const restorationState = handler.getRestorationState();
121
+ expect(restorationState.selectedFacets.collection.foo.state).to.equal('hidden');
122
+ });
123
+ it('should restore selected facets with numbers in the square brackets', async () => {
124
+ const handler = new RestorationStateHandler({ context: 'search' });
125
+ const url = new URL(window.location.href);
126
+ url.search = '?and[12]=subject:"foo"';
127
+ window.history.replaceState({ path: url.href }, '', url.href);
128
+ const restorationState = handler.getRestorationState();
129
+ expect(restorationState.selectedFacets.subject.foo.state).to.equal('selected');
130
+ });
131
+ it('should restore negative facets with numbers in the square brackets', async () => {
132
+ const handler = new RestorationStateHandler({ context: 'search' });
133
+ const url = new URL(window.location.href);
134
+ url.search = '?not[12]=year:2018';
135
+ window.history.replaceState({ path: url.href }, '', url.href);
136
+ const restorationState = handler.getRestorationState();
137
+ expect(restorationState.selectedFacets.year['2018'].state).to.equal('hidden');
138
+ });
139
+ it('should restore sort from URL (space format)', async () => {
140
+ const handler = new RestorationStateHandler({ context: 'search' });
141
+ const url = new URL(window.location.href);
142
+ url.search = '?sort=date+desc';
143
+ window.history.replaceState({ path: url.href }, '', url.href);
144
+ const restorationState = handler.getRestorationState();
145
+ expect(restorationState.selectedSort).to.equal('date');
146
+ expect(restorationState.sortDirection).to.equal('desc');
147
+ });
148
+ it('should restore sort from URL (prefix format, desc)', async () => {
149
+ const handler = new RestorationStateHandler({ context: 'search' });
150
+ const url = new URL(window.location.href);
151
+ url.search = '?sort=-date';
152
+ window.history.replaceState({ path: url.href }, '', url.href);
153
+ const restorationState = handler.getRestorationState();
154
+ expect(restorationState.selectedSort).to.equal('date');
155
+ expect(restorationState.sortDirection).to.equal('desc');
156
+ });
157
+ it('should restore sort from URL (prefix format, asc)', async () => {
158
+ const handler = new RestorationStateHandler({ context: 'search' });
159
+ const url = new URL(window.location.href);
160
+ url.search = '?sort=date';
161
+ window.history.replaceState({ path: url.href }, '', url.href);
162
+ const restorationState = handler.getRestorationState();
163
+ expect(restorationState.selectedSort).to.equal('date');
164
+ expect(restorationState.sortDirection).to.equal('asc');
165
+ });
166
+ it('should restore sort from URL (space format)', async () => {
167
+ const handler = new RestorationStateHandler({ context: 'search' });
168
+ const url = new URL(window.location.href);
169
+ url.search = '?sort=foo+desc';
170
+ window.history.replaceState({ path: url.href }, '', url.href);
171
+ const restorationState = handler.getRestorationState();
172
+ expect(restorationState.selectedSort).to.equal('unrecognized');
173
+ expect(restorationState.sortDirection).to.equal('desc');
174
+ });
175
+ it('should restore unrecognized sort from URL (prefix format)', async () => {
176
+ const handler = new RestorationStateHandler({ context: 'search' });
177
+ const url = new URL(window.location.href);
178
+ url.search = '?sort=-foo';
179
+ window.history.replaceState({ path: url.href }, '', url.href);
180
+ const restorationState = handler.getRestorationState();
181
+ expect(restorationState.selectedSort).to.equal('unrecognized');
182
+ expect(restorationState.sortDirection).to.equal('desc');
183
+ });
184
+ it('should save direction to URL even for unrecognized sort fields', async () => {
185
+ const url = new URL(window.location.href);
186
+ url.search = '?sort=foo';
187
+ window.history.replaceState({ path: url.href }, '', url.href);
188
+ const handler = new RestorationStateHandler({ context: 'search' });
189
+ handler.persistState({
190
+ selectedSort: SortField.unrecognized,
191
+ sortDirection: 'desc',
192
+ selectedFacets: getDefaultSelectedFacets(),
193
+ });
194
+ expect(window.location.search).to.equal('?sort=-foo');
195
+ });
196
+ it('should keep existing direction for unrecognized sort fields when unspecified in state', async () => {
197
+ const url = new URL(window.location.href);
198
+ url.search = '?sort=foo+desc';
199
+ window.history.replaceState({ path: url.href }, '', url.href);
200
+ const handler = new RestorationStateHandler({ context: 'search' });
201
+ handler.persistState({
202
+ selectedSort: SortField.unrecognized,
203
+ selectedFacets: getDefaultSelectedFacets(),
204
+ });
205
+ expect(window.location.search).to.equal('?sort=-foo');
206
+ });
207
+ it('should just ignore unrecognized sort fields w/ unknown formats', async () => {
208
+ const url = new URL(window.location.href);
209
+ url.search = '?sort=+foo';
210
+ window.history.replaceState({ path: url.href }, '', url.href);
211
+ const handler = new RestorationStateHandler({ context: 'search' });
212
+ handler.persistState({
213
+ selectedSort: SortField.unrecognized,
214
+ selectedFacets: getDefaultSelectedFacets(),
215
+ });
216
+ expect(window.location.search).to.equal('?sort=+foo');
217
+ });
218
+ it('should not save current page state to the URL for page 1', async () => {
219
+ const url = new URL(window.location.href);
220
+ url.search = '';
221
+ window.history.replaceState({ path: url.href }, '', url.href);
222
+ const handler = new RestorationStateHandler({ context: 'search' });
223
+ handler.persistState({
224
+ currentPage: 1,
225
+ selectedFacets: getDefaultSelectedFacets(),
226
+ });
227
+ expect(window.location.search).to.be.empty;
228
+ });
229
+ it('should save current page state to the URL when page > 1', async () => {
230
+ const url = new URL(window.location.href);
231
+ url.search = '';
232
+ window.history.replaceState({ path: url.href }, '', url.href);
233
+ const handler = new RestorationStateHandler({ context: 'search' });
234
+ handler.persistState({
235
+ currentPage: 2,
236
+ selectedFacets: getDefaultSelectedFacets(),
237
+ });
238
+ expect(window.location.search).to.equal('?page=2');
239
+ });
240
+ it('should upgrade legacy search params to new ones', async () => {
241
+ const url = new URL(window.location.href);
242
+ url.search = '?q=foo';
243
+ window.history.replaceState({ path: url.href }, '', url.href);
244
+ const handler = new RestorationStateHandler({ context: 'search' });
245
+ const restorationState = handler.getRestorationState();
246
+ expect(restorationState.baseQuery).to.equal('foo');
247
+ handler.persistState(restorationState);
248
+ expect(window.location.search).to.equal('?query=foo');
249
+ });
250
+ it('should remove empty sin param', async () => {
251
+ const url = new URL(window.location.href);
252
+ url.search = '?sin=';
253
+ window.history.replaceState({ path: url.href }, '', url.href);
254
+ const handler = new RestorationStateHandler({ context: 'search' });
255
+ handler.persistState({ selectedFacets: getDefaultSelectedFacets() });
256
+ expect(window.location.search).to.equal('');
257
+ });
258
+ it('round trip load/persist should erase numbers in square brackets', async () => {
259
+ const handler = new RestorationStateHandler({ context: 'search' });
260
+ const url = new URL(window.location.href);
261
+ url.search = '?and[0]=subject:"foo"';
262
+ window.history.replaceState({ path: url.href }, '', url.href);
263
+ // Load state from the URL and immediately persist it back to the URL
264
+ const restorationState = handler.getRestorationState();
265
+ handler.persistState(restorationState);
266
+ // Ensure the new URL includes the "normalized" facet parameter and not the numbered one
267
+ expect(decodeURIComponent(window.location.search)).to.include('and[]=subject:"foo"');
268
+ expect(new URL(window.location.href).searchParams.get('and[0]')).to.be.null;
269
+ });
270
+ });
271
271
  //# sourceMappingURL=restoration-state-handler.test.js.map
@@ -1 +1 @@
1
- import '../src/tiles/review-block';
1
+ import '../src/tiles/review-block';