@internetarchive/collection-browser 1.14.10-alpha.3 → 1.14.10-alpha1

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 (293) 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 +9 -9
  6. package/dist/index.js +9 -9
  7. package/dist/src/app-root.d.ts +79 -72
  8. package/dist/src/app-root.js +564 -432
  9. package/dist/src/app-root.js.map +1 -1
  10. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  11. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  12. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  13. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  14. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  15. package/dist/src/assets/img/icons/chevron.js +2 -2
  16. package/dist/src/assets/img/icons/contract.d.ts +2 -2
  17. package/dist/src/assets/img/icons/contract.js +2 -2
  18. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  19. package/dist/src/assets/img/icons/empty-query.js +2 -2
  20. package/dist/src/assets/img/icons/expand.d.ts +2 -2
  21. package/dist/src/assets/img/icons/expand.js +2 -2
  22. package/dist/src/assets/img/icons/eye-closed.d.ts +2 -2
  23. package/dist/src/assets/img/icons/eye-closed.js +2 -2
  24. package/dist/src/assets/img/icons/eye.d.ts +2 -2
  25. package/dist/src/assets/img/icons/eye.js +2 -2
  26. package/dist/src/assets/img/icons/favorite-filled.d.ts +1 -1
  27. package/dist/src/assets/img/icons/favorite-filled.js +2 -2
  28. package/dist/src/assets/img/icons/login-required.d.ts +1 -1
  29. package/dist/src/assets/img/icons/login-required.js +2 -2
  30. package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -1
  31. package/dist/src/assets/img/icons/mediatype/account.js +2 -2
  32. package/dist/src/assets/img/icons/mediatype/audio.d.ts +1 -1
  33. package/dist/src/assets/img/icons/mediatype/audio.js +2 -2
  34. package/dist/src/assets/img/icons/mediatype/collection.d.ts +1 -1
  35. package/dist/src/assets/img/icons/mediatype/collection.js +2 -2
  36. package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -1
  37. package/dist/src/assets/img/icons/mediatype/data.js +2 -2
  38. package/dist/src/assets/img/icons/mediatype/etree.d.ts +1 -1
  39. package/dist/src/assets/img/icons/mediatype/etree.js +2 -2
  40. package/dist/src/assets/img/icons/mediatype/film.d.ts +1 -1
  41. package/dist/src/assets/img/icons/mediatype/film.js +2 -2
  42. package/dist/src/assets/img/icons/mediatype/images.d.ts +1 -1
  43. package/dist/src/assets/img/icons/mediatype/images.js +2 -2
  44. package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -1
  45. package/dist/src/assets/img/icons/mediatype/radio.js +2 -2
  46. package/dist/src/assets/img/icons/mediatype/search.d.ts +1 -1
  47. package/dist/src/assets/img/icons/mediatype/search.js +2 -2
  48. package/dist/src/assets/img/icons/mediatype/software.d.ts +1 -1
  49. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  50. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  51. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  52. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  53. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  54. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  55. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  56. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  57. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  58. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  59. package/dist/src/assets/img/icons/null-result.js +2 -2
  60. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  61. package/dist/src/assets/img/icons/restricted.js +2 -2
  62. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  63. package/dist/src/assets/img/icons/reviews.js +2 -2
  64. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  65. package/dist/src/assets/img/icons/upload.js +2 -2
  66. package/dist/src/assets/img/icons/views.d.ts +1 -1
  67. package/dist/src/assets/img/icons/views.js +2 -2
  68. package/dist/src/circular-activity-indicator.d.ts +5 -5
  69. package/dist/src/circular-activity-indicator.js +17 -17
  70. package/dist/src/collection-browser.d.ts +533 -533
  71. package/dist/src/collection-browser.js +1897 -1891
  72. package/dist/src/collection-browser.js.map +1 -1
  73. package/dist/src/collection-facets/facet-row.d.ts +30 -0
  74. package/dist/src/collection-facets/facet-row.js +245 -0
  75. package/dist/src/collection-facets/facet-row.js.map +1 -0
  76. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  77. package/dist/src/collection-facets/facet-tombstone-row.js +15 -15
  78. package/dist/src/collection-facets/facets-template.d.ts +17 -20
  79. package/dist/src/collection-facets/facets-template.js +122 -264
  80. package/dist/src/collection-facets/facets-template.js.map +1 -1
  81. package/dist/src/collection-facets/more-facets-content.d.ts +77 -77
  82. package/dist/src/collection-facets/more-facets-content.js +359 -359
  83. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  84. package/dist/src/collection-facets/more-facets-pagination.js +196 -196
  85. package/dist/src/collection-facets/toggle-switch.d.ts +41 -41
  86. package/dist/src/collection-facets/toggle-switch.js +94 -94
  87. package/dist/src/collection-facets.d.ts +104 -104
  88. package/dist/src/collection-facets.js +506 -506
  89. package/dist/src/empty-placeholder.d.ts +23 -23
  90. package/dist/src/empty-placeholder.js +74 -74
  91. package/dist/src/expanded-date-picker.d.ts +43 -43
  92. package/dist/src/expanded-date-picker.js +109 -109
  93. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  94. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  95. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  96. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  97. package/dist/src/manage/manage-bar.d.ts +26 -26
  98. package/dist/src/manage/manage-bar.js +53 -53
  99. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  100. package/dist/src/mediatype/mediatype-config.js +91 -91
  101. package/dist/src/models.d.ts +180 -164
  102. package/dist/src/models.js +269 -269
  103. package/dist/src/models.js.map +1 -1
  104. package/dist/src/restoration-state-handler.d.ts +70 -70
  105. package/dist/src/restoration-state-handler.js +355 -355
  106. package/dist/src/sort-filter-bar/alpha-bar-tooltip.d.ts +6 -6
  107. package/dist/src/sort-filter-bar/alpha-bar-tooltip.js +24 -24
  108. package/dist/src/sort-filter-bar/alpha-bar.d.ts +21 -21
  109. package/dist/src/sort-filter-bar/alpha-bar.js +128 -128
  110. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  111. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  112. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  113. package/dist/src/sort-filter-bar/img/list.js +2 -2
  114. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.d.ts +1 -1
  115. package/dist/src/sort-filter-bar/img/sort-toggle-disabled.js +2 -2
  116. package/dist/src/sort-filter-bar/img/sort-toggle-down.d.ts +1 -1
  117. package/dist/src/sort-filter-bar/img/sort-toggle-down.js +2 -2
  118. package/dist/src/sort-filter-bar/img/sort-toggle-up.d.ts +1 -1
  119. package/dist/src/sort-filter-bar/img/sort-toggle-up.js +2 -2
  120. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  121. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  122. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  123. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  124. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +208 -208
  125. package/dist/src/sort-filter-bar/sort-filter-bar.js +638 -637
  126. package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
  127. package/dist/src/styles/item-image-styles.d.ts +8 -8
  128. package/dist/src/styles/item-image-styles.js +9 -9
  129. package/dist/src/styles/sr-only.d.ts +1 -1
  130. package/dist/src/styles/sr-only.js +2 -2
  131. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  132. package/dist/src/tiles/base-tile-component.js +63 -63
  133. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  134. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  135. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  136. package/dist/src/tiles/grid/account-tile.js +72 -72
  137. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  138. package/dist/src/tiles/grid/collection-tile.js +80 -80
  139. package/dist/src/tiles/grid/item-tile.d.ts +27 -27
  140. package/dist/src/tiles/grid/item-tile.js +134 -134
  141. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  142. package/dist/src/tiles/grid/search-tile.js +51 -51
  143. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  144. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  145. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  146. package/dist/src/tiles/grid/tile-stats.js +48 -48
  147. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  148. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  149. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
  150. package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
  151. package/dist/src/tiles/image-block.d.ts +17 -17
  152. package/dist/src/tiles/image-block.js +73 -73
  153. package/dist/src/tiles/item-image.d.ts +36 -36
  154. package/dist/src/tiles/item-image.js +127 -127
  155. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  156. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  157. package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
  158. package/dist/src/tiles/list/tile-list-compact.js +114 -114
  159. package/dist/src/tiles/list/tile-list.d.ts +46 -46
  160. package/dist/src/tiles/list/tile-list.js +302 -302
  161. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  162. package/dist/src/tiles/mediatype-icon.js +47 -47
  163. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  164. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  165. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  166. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  167. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  168. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  169. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  170. package/dist/src/tiles/text-snippet-block.js +73 -73
  171. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  172. package/dist/src/tiles/tile-dispatcher.js +231 -231
  173. package/dist/src/tiles/tile-display-value-provider.d.ts +43 -43
  174. package/dist/src/tiles/tile-display-value-provider.js +80 -80
  175. package/dist/src/utils/analytics-events.d.ts +25 -25
  176. package/dist/src/utils/analytics-events.js +27 -27
  177. package/dist/src/utils/array-equals.d.ts +4 -4
  178. package/dist/src/utils/array-equals.js +10 -10
  179. package/dist/src/utils/format-count.d.ts +7 -7
  180. package/dist/src/utils/format-count.js +76 -76
  181. package/dist/src/utils/format-date.d.ts +2 -2
  182. package/dist/src/utils/format-date.js +25 -25
  183. package/dist/src/utils/format-unit-size.d.ts +2 -2
  184. package/dist/src/utils/format-unit-size.js +33 -33
  185. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  186. package/dist/src/utils/local-date-from-utc.js +15 -15
  187. package/dist/src/utils/sha1.d.ts +2 -2
  188. package/dist/src/utils/sha1.js +8 -8
  189. package/dist/test/collection-browser.test.d.ts +1 -1
  190. package/dist/test/collection-browser.test.js +1130 -1098
  191. package/dist/test/collection-browser.test.js.map +1 -1
  192. package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
  193. package/dist/test/collection-facets/facet-row.test.js +235 -0
  194. package/dist/test/collection-facets/facet-row.test.js.map +1 -0
  195. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  196. package/dist/test/collection-facets/facets-template.test.js +110 -141
  197. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  198. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  199. package/dist/test/collection-facets/more-facets-content.test.js +133 -133
  200. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  201. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  202. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  203. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  204. package/dist/test/collection-facets.test.d.ts +2 -2
  205. package/dist/test/collection-facets.test.js +651 -682
  206. package/dist/test/collection-facets.test.js.map +1 -1
  207. package/dist/test/empty-placeholder.test.d.ts +1 -1
  208. package/dist/test/empty-placeholder.test.js +63 -63
  209. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  210. package/dist/test/expanded-date-picker.test.js +95 -95
  211. package/dist/test/icon-overlay.test.d.ts +1 -1
  212. package/dist/test/icon-overlay.test.js +24 -24
  213. package/dist/test/image-block.test.d.ts +1 -1
  214. package/dist/test/image-block.test.js +48 -48
  215. package/dist/test/item-image.test.d.ts +1 -1
  216. package/dist/test/item-image.test.js +86 -86
  217. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  218. package/dist/test/manage/manage-bar.test.js +72 -72
  219. package/dist/test/mediatype-config.test.d.ts +1 -1
  220. package/dist/test/mediatype-config.test.js +16 -16
  221. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  222. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  223. package/dist/test/mocks/mock-collection-name-cache.d.ts +9 -9
  224. package/dist/test/mocks/mock-collection-name-cache.js +17 -17
  225. package/dist/test/mocks/mock-search-responses.d.ts +21 -21
  226. package/dist/test/mocks/mock-search-responses.js +709 -709
  227. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  228. package/dist/test/mocks/mock-search-service.js +50 -50
  229. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  230. package/dist/test/restoration-state-handler.test.js +270 -270
  231. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  232. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  233. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  234. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  235. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  236. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +378 -378
  237. package/dist/test/text-overlay.test.d.ts +1 -1
  238. package/dist/test/text-overlay.test.js +48 -48
  239. package/dist/test/text-snippet-block.test.d.ts +1 -1
  240. package/dist/test/text-snippet-block.test.js +57 -57
  241. package/dist/test/tile-stats.test.d.ts +1 -1
  242. package/dist/test/tile-stats.test.js +33 -33
  243. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  244. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  245. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  246. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  247. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  248. package/dist/test/tiles/grid/item-tile.test.js +254 -254
  249. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  250. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  251. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  252. package/dist/test/tiles/hover/hover-pane-controller.test.js +258 -258
  253. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  254. package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
  255. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  256. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  257. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  258. package/dist/test/tiles/list/tile-list.test.js +242 -242
  259. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  260. package/dist/test/tiles/tile-dispatcher.test.js +94 -94
  261. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  262. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  263. package/dist/test/utils/array-equals.test.d.ts +1 -1
  264. package/dist/test/utils/array-equals.test.js +26 -26
  265. package/dist/test/utils/format-count.test.d.ts +1 -1
  266. package/dist/test/utils/format-count.test.js +23 -23
  267. package/dist/test/utils/format-date.test.d.ts +1 -1
  268. package/dist/test/utils/format-date.test.js +17 -17
  269. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  270. package/dist/test/utils/format-unit-size.test.js +17 -17
  271. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  272. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  273. package/local.archive.org.cert +86 -86
  274. package/local.archive.org.key +27 -27
  275. package/package.json +5 -5
  276. package/renovate.json +6 -6
  277. package/src/app-root.ts +230 -90
  278. package/src/collection-browser.ts +23 -18
  279. package/src/collection-facets/facet-row.ts +274 -0
  280. package/src/collection-facets/facets-template.ts +49 -196
  281. package/src/models.ts +18 -2
  282. package/src/sort-filter-bar/sort-filter-bar.ts +1 -0
  283. package/test/collection-browser.test.ts +36 -4
  284. package/test/collection-facets/facet-row.test.ts +328 -0
  285. package/test/collection-facets/facets-template.test.ts +72 -110
  286. package/test/collection-facets.test.ts +69 -101
  287. package/tsconfig.json +21 -21
  288. package/web-dev-server.config.mjs +30 -30
  289. package/web-test-runner.config.mjs +41 -41
  290. package/dist/src/selected-facets.d.ts +0 -67
  291. package/dist/src/selected-facets.js +0 -149
  292. package/dist/src/selected-facets.js.map +0 -1
  293. package/src/selected-facets.ts +0 -216
@@ -1,216 +0,0 @@
1
- import {
2
- facetTitles,
3
- type FacetBucket,
4
- type FacetGroup,
5
- type FacetOption,
6
- type FacetValue,
7
- lendingFacetDisplayNames,
8
- LendingFacetKey,
9
- } from './models';
10
-
11
- /**
12
- * A record of all the facet buckets for a particular facet type, indexed by their bucket key
13
- */
14
- export type FacetBucketsRecord = Record<FacetValue, FacetBucket>;
15
-
16
- // Implementing this model ensures that every facet type is accounted for
17
- type SelectedFacetsModel = Record<FacetOption, FacetBucketsRecord>;
18
-
19
- const VALID_FACET_OPTIONS: Set<FacetOption> = new Set([
20
- 'collection',
21
- 'creator',
22
- 'language',
23
- 'lending',
24
- 'mediatype',
25
- 'subject',
26
- 'year',
27
- ]);
28
-
29
- /**
30
- * A class to hold, query, and manipulate state about selected/hidden facets.
31
- */
32
- export class SelectedFacets implements SelectedFacetsModel {
33
- readonly collection: FacetBucketsRecord = {};
34
-
35
- readonly creator: FacetBucketsRecord = {};
36
-
37
- readonly language: FacetBucketsRecord = {};
38
-
39
- readonly lending: FacetBucketsRecord = {};
40
-
41
- readonly mediatype: FacetBucketsRecord = {};
42
-
43
- readonly subject: FacetBucketsRecord = {};
44
-
45
- readonly year: FacetBucketsRecord = {};
46
-
47
- constructor(initValues?: Partial<SelectedFacetsModel>) {
48
- if (initValues) {
49
- for (const [facetType, buckets] of Object.entries(initValues)) {
50
- if (VALID_FACET_OPTIONS.has(facetType as FacetOption)) {
51
- for (const [bucketKey, bucket] of Object.entries(buckets)) {
52
- this[facetType as FacetOption][bucketKey] = { ...bucket };
53
- }
54
- }
55
- }
56
- }
57
- }
58
-
59
- /**
60
- * Executes the given function on every facet bucket within the current SelectedFacets object.
61
- * @param fn The function to execute for each facet bucket
62
- */
63
- forEach(
64
- fn: (
65
- bucket: FacetBucket,
66
- bucketKey: FacetValue,
67
- facetType: FacetOption
68
- ) => unknown
69
- ): void {
70
- for (const [facetType, buckets] of Object.entries(
71
- this as SelectedFacetsModel
72
- )) {
73
- for (const [bucketKey, bucket] of Object.entries(buckets)) {
74
- fn(bucket, bucketKey, facetType as FacetOption);
75
- }
76
- }
77
- }
78
-
79
- /**
80
- * Executes the given function on every facet type within the current SelectedFacets object.
81
- * Similar to `SelectedFacets.forEach`, but operating on the full set of buckets for each type
82
- * (rather than individual buckets).
83
- * @param fn The function to execute for each facet type
84
- */
85
- forEachFacetType(
86
- fn: (buckets: FacetBucketsRecord, facetType: FacetOption) => unknown
87
- ): void {
88
- for (const [facetType, buckets] of Object.entries(
89
- this as SelectedFacetsModel
90
- )) {
91
- fn(buckets, facetType as FacetOption);
92
- }
93
- }
94
-
95
- /**
96
- * Like `Array.some`, returns whether the given predicate function returns true for
97
- * any of the facet buckets contained in this object.
98
- * @param predicate Function returning a boolean for each bucket
99
- * @returns Whether any of the facet buckets satisfy the predicate
100
- */
101
- some(
102
- predicate: (
103
- bucket: FacetBucket,
104
- bucketKey: FacetValue,
105
- facetType: FacetOption
106
- ) => boolean
107
- ): boolean {
108
- for (const [facetType, buckets] of Object.entries(
109
- this as SelectedFacetsModel
110
- )) {
111
- for (const [bucketKey, bucket] of Object.entries(buckets)) {
112
- if (predicate(bucket, bucketKey, facetType as FacetOption)) return true;
113
- }
114
- }
115
-
116
- return false;
117
- }
118
-
119
- /**
120
- * Like `Array.every`, returns whether the given predicate function returns true for
121
- * *all* of the facet buckets contained in this object.
122
- * @param predicate Function returning a boolean for each bucket
123
- * @returns Whether all of the facet buckets satisfy the predicate
124
- */
125
- every(
126
- predicate: (
127
- bucket: FacetBucket,
128
- bucketKey: FacetValue,
129
- facetType: FacetOption
130
- ) => boolean
131
- ): boolean {
132
- for (const [facetType, buckets] of Object.entries(
133
- this as SelectedFacetsModel
134
- )) {
135
- for (const [bucketKey, bucket] of Object.entries(buckets)) {
136
- if (!predicate(bucket, bucketKey, facetType as FacetOption))
137
- return false;
138
- }
139
- }
140
-
141
- return true;
142
- }
143
-
144
- /**
145
- * Returns a new SelectedFacets object deeply cloned from this one (same contents).
146
- */
147
- clone(): SelectedFacets {
148
- return new SelectedFacets(this);
149
- }
150
-
151
- /**
152
- * Returns a new SelectedFacets object cloned from this one with all of the given `otherFacets`
153
- * applied overtop. Facets from this object will be overwritten by those in `otherFacets`
154
- * that have the same facet type and bucket key.
155
- *
156
- * @param otherFacets The other SelectedFacets object to merge into this one.
157
- */
158
- merge(otherFacets?: SelectedFacets): SelectedFacets {
159
- const merged = this.clone();
160
- otherFacets?.forEach((bucket, bucketKey, facetType) => {
161
- merged[facetType][bucketKey] = { ...bucket };
162
- });
163
-
164
- return merged;
165
- }
166
-
167
- /**
168
- * Returns a new SelectedFacets object with facet buckets normalized, such that any
169
- * buckets with a state of 'none' are removed entirely.
170
- */
171
- normalize(): SelectedFacets {
172
- const normalized = this.clone();
173
- normalized.forEach((bucket, bucketKey, facetType) => {
174
- if (bucket.state === 'none') {
175
- delete normalized[facetType][bucketKey];
176
- }
177
- });
178
-
179
- return normalized;
180
- }
181
-
182
- /**
183
- * Converts this SelectedFacets object into an array of equivalent FacetGroups.
184
- */
185
- toFacetGroups(): FacetGroup[] {
186
- const facetGroups: Record<string, FacetGroup> = {};
187
-
188
- this.forEach((bucket, bucketKey, facetType) => {
189
- const title = facetTitles[facetType];
190
- let displayText = bucketKey;
191
-
192
- // For lending facets, convert the key to a more readable format
193
- if (facetType === 'lending') {
194
- displayText =
195
- lendingFacetDisplayNames[bucketKey as LendingFacetKey] ?? bucketKey;
196
- }
197
-
198
- if (!facetGroups[facetType]) {
199
- facetGroups[facetType] = {
200
- title,
201
- key: facetType,
202
- buckets: [],
203
- };
204
- }
205
-
206
- facetGroups[facetType].buckets.push({
207
- displayText,
208
- key: bucketKey,
209
- count: bucket.count,
210
- state: bucket.state,
211
- });
212
- });
213
-
214
- return Object.values(facetGroups);
215
- }
216
- }