@internetarchive/collection-browser 1.14.9-alpha.2 → 1.14.9-alpha10

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 (291) 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 +73 -72
  8. package/dist/src/app-root.js +501 -429
  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 +1894 -1893
  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 +637 -637
  126. package/dist/src/styles/item-image-styles.d.ts +8 -8
  127. package/dist/src/styles/item-image-styles.js +9 -9
  128. package/dist/src/styles/sr-only.d.ts +1 -1
  129. package/dist/src/styles/sr-only.js +2 -2
  130. package/dist/src/tiles/base-tile-component.d.ts +19 -19
  131. package/dist/src/tiles/base-tile-component.js +63 -63
  132. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  133. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  134. package/dist/src/tiles/grid/account-tile.d.ts +18 -18
  135. package/dist/src/tiles/grid/account-tile.js +72 -72
  136. package/dist/src/tiles/grid/collection-tile.d.ts +15 -15
  137. package/dist/src/tiles/grid/collection-tile.js +80 -80
  138. package/dist/src/tiles/grid/item-tile.d.ts +27 -27
  139. package/dist/src/tiles/grid/item-tile.js +134 -134
  140. package/dist/src/tiles/grid/search-tile.d.ts +10 -10
  141. package/dist/src/tiles/grid/search-tile.js +51 -51
  142. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.d.ts +1 -1
  143. package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +8 -8
  144. package/dist/src/tiles/grid/tile-stats.d.ts +11 -11
  145. package/dist/src/tiles/grid/tile-stats.js +48 -48
  146. package/dist/src/tiles/hover/hover-pane-controller.d.ts +219 -219
  147. package/dist/src/tiles/hover/hover-pane-controller.js +352 -352
  148. package/dist/src/tiles/hover/tile-hover-pane.d.ts +15 -15
  149. package/dist/src/tiles/hover/tile-hover-pane.js +38 -38
  150. package/dist/src/tiles/image-block.d.ts +17 -17
  151. package/dist/src/tiles/image-block.js +73 -73
  152. package/dist/src/tiles/item-image.d.ts +36 -36
  153. package/dist/src/tiles/item-image.js +127 -127
  154. package/dist/src/tiles/list/tile-list-compact-header.d.ts +6 -6
  155. package/dist/src/tiles/list/tile-list-compact-header.js +38 -38
  156. package/dist/src/tiles/list/tile-list-compact.d.ts +15 -15
  157. package/dist/src/tiles/list/tile-list-compact.js +114 -114
  158. package/dist/src/tiles/list/tile-list.d.ts +46 -46
  159. package/dist/src/tiles/list/tile-list.js +302 -302
  160. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  161. package/dist/src/tiles/mediatype-icon.js +47 -47
  162. package/dist/src/tiles/overlay/icon-overlay.d.ts +10 -10
  163. package/dist/src/tiles/overlay/icon-overlay.js +40 -40
  164. package/dist/src/tiles/overlay/icon-text-overlay.d.ts +9 -9
  165. package/dist/src/tiles/overlay/icon-text-overlay.js +38 -38
  166. package/dist/src/tiles/overlay/text-overlay.d.ts +10 -10
  167. package/dist/src/tiles/overlay/text-overlay.js +42 -42
  168. package/dist/src/tiles/text-snippet-block.d.ts +27 -27
  169. package/dist/src/tiles/text-snippet-block.js +73 -73
  170. package/dist/src/tiles/tile-dispatcher.d.ts +64 -64
  171. package/dist/src/tiles/tile-dispatcher.js +231 -231
  172. package/dist/src/tiles/tile-display-value-provider.d.ts +43 -43
  173. package/dist/src/tiles/tile-display-value-provider.js +80 -80
  174. package/dist/src/utils/analytics-events.d.ts +25 -25
  175. package/dist/src/utils/analytics-events.js +27 -27
  176. package/dist/src/utils/array-equals.d.ts +4 -4
  177. package/dist/src/utils/array-equals.js +10 -10
  178. package/dist/src/utils/format-count.d.ts +7 -7
  179. package/dist/src/utils/format-count.js +76 -76
  180. package/dist/src/utils/format-date.d.ts +2 -2
  181. package/dist/src/utils/format-date.js +25 -25
  182. package/dist/src/utils/format-unit-size.d.ts +2 -2
  183. package/dist/src/utils/format-unit-size.js +33 -33
  184. package/dist/src/utils/local-date-from-utc.d.ts +9 -9
  185. package/dist/src/utils/local-date-from-utc.js +15 -15
  186. package/dist/src/utils/sha1.d.ts +2 -2
  187. package/dist/src/utils/sha1.js +8 -8
  188. package/dist/test/collection-browser.test.d.ts +1 -1
  189. package/dist/test/collection-browser.test.js +1130 -1098
  190. package/dist/test/collection-browser.test.js.map +1 -1
  191. package/dist/test/collection-facets/facet-row.test.d.ts +1 -0
  192. package/dist/test/collection-facets/facet-row.test.js +235 -0
  193. package/dist/test/collection-facets/facet-row.test.js.map +1 -0
  194. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  195. package/dist/test/collection-facets/facets-template.test.js +110 -141
  196. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  197. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  198. package/dist/test/collection-facets/more-facets-content.test.js +133 -133
  199. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  200. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  201. package/dist/test/collection-facets/toggle-switch.test.d.ts +1 -1
  202. package/dist/test/collection-facets/toggle-switch.test.js +73 -73
  203. package/dist/test/collection-facets.test.d.ts +2 -2
  204. package/dist/test/collection-facets.test.js +651 -682
  205. package/dist/test/collection-facets.test.js.map +1 -1
  206. package/dist/test/empty-placeholder.test.d.ts +1 -1
  207. package/dist/test/empty-placeholder.test.js +63 -63
  208. package/dist/test/expanded-date-picker.test.d.ts +1 -1
  209. package/dist/test/expanded-date-picker.test.js +95 -95
  210. package/dist/test/icon-overlay.test.d.ts +1 -1
  211. package/dist/test/icon-overlay.test.js +24 -24
  212. package/dist/test/image-block.test.d.ts +1 -1
  213. package/dist/test/image-block.test.js +48 -48
  214. package/dist/test/item-image.test.d.ts +1 -1
  215. package/dist/test/item-image.test.js +86 -86
  216. package/dist/test/manage/manage-bar.test.d.ts +1 -1
  217. package/dist/test/manage/manage-bar.test.js +72 -72
  218. package/dist/test/mediatype-config.test.d.ts +1 -1
  219. package/dist/test/mediatype-config.test.js +16 -16
  220. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  221. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  222. package/dist/test/mocks/mock-collection-name-cache.d.ts +9 -9
  223. package/dist/test/mocks/mock-collection-name-cache.js +17 -17
  224. package/dist/test/mocks/mock-search-responses.d.ts +21 -21
  225. package/dist/test/mocks/mock-search-responses.js +709 -709
  226. package/dist/test/mocks/mock-search-service.d.ts +15 -15
  227. package/dist/test/mocks/mock-search-service.js +50 -50
  228. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  229. package/dist/test/restoration-state-handler.test.js +270 -270
  230. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.d.ts +1 -1
  231. package/dist/test/sort-filter-bar/alpha-bar-tooltip.test.js +12 -12
  232. package/dist/test/sort-filter-bar/alpha-bar.test.d.ts +1 -1
  233. package/dist/test/sort-filter-bar/alpha-bar.test.js +73 -73
  234. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  235. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +378 -378
  236. package/dist/test/text-overlay.test.d.ts +1 -1
  237. package/dist/test/text-overlay.test.js +48 -48
  238. package/dist/test/text-snippet-block.test.d.ts +1 -1
  239. package/dist/test/text-snippet-block.test.js +57 -57
  240. package/dist/test/tile-stats.test.d.ts +1 -1
  241. package/dist/test/tile-stats.test.js +33 -33
  242. package/dist/test/tiles/grid/account-tile.test.d.ts +1 -1
  243. package/dist/test/tiles/grid/account-tile.test.js +76 -76
  244. package/dist/test/tiles/grid/collection-tile.test.d.ts +1 -1
  245. package/dist/test/tiles/grid/collection-tile.test.js +73 -73
  246. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  247. package/dist/test/tiles/grid/item-tile.test.js +254 -254
  248. package/dist/test/tiles/grid/search-tile.test.d.ts +1 -1
  249. package/dist/test/tiles/grid/search-tile.test.js +51 -51
  250. package/dist/test/tiles/hover/hover-pane-controller.test.d.ts +1 -1
  251. package/dist/test/tiles/hover/hover-pane-controller.test.js +258 -258
  252. package/dist/test/tiles/hover/tile-hover-pane.test.d.ts +1 -1
  253. package/dist/test/tiles/hover/tile-hover-pane.test.js +13 -13
  254. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  255. package/dist/test/tiles/list/tile-list-compact.test.js +143 -143
  256. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  257. package/dist/test/tiles/list/tile-list.test.js +242 -242
  258. package/dist/test/tiles/tile-dispatcher.test.d.ts +1 -1
  259. package/dist/test/tiles/tile-dispatcher.test.js +94 -94
  260. package/dist/test/tiles/tile-display-value-provider.test.d.ts +1 -1
  261. package/dist/test/tiles/tile-display-value-provider.test.js +141 -141
  262. package/dist/test/utils/array-equals.test.d.ts +1 -1
  263. package/dist/test/utils/array-equals.test.js +26 -26
  264. package/dist/test/utils/format-count.test.d.ts +1 -1
  265. package/dist/test/utils/format-count.test.js +23 -23
  266. package/dist/test/utils/format-date.test.d.ts +1 -1
  267. package/dist/test/utils/format-date.test.js +17 -17
  268. package/dist/test/utils/format-unit-size.test.d.ts +1 -1
  269. package/dist/test/utils/format-unit-size.test.js +17 -17
  270. package/dist/test/utils/local-date-from-utc.test.d.ts +1 -1
  271. package/dist/test/utils/local-date-from-utc.test.js +26 -26
  272. package/local.archive.org.cert +86 -86
  273. package/local.archive.org.key +27 -27
  274. package/package.json +2 -2
  275. package/renovate.json +6 -6
  276. package/src/app-root.ts +159 -82
  277. package/src/collection-browser.ts +25 -22
  278. package/src/collection-facets/facet-row.ts +274 -0
  279. package/src/collection-facets/facets-template.ts +49 -196
  280. package/src/models.ts +18 -2
  281. package/test/collection-browser.test.ts +36 -4
  282. package/test/collection-facets/facet-row.test.ts +328 -0
  283. package/test/collection-facets/facets-template.test.ts +72 -110
  284. package/test/collection-facets.test.ts +69 -101
  285. package/tsconfig.json +21 -21
  286. package/web-dev-server.config.mjs +30 -30
  287. package/web-test-runner.config.mjs +41 -41
  288. package/dist/src/selected-facets.d.ts +0 -67
  289. package/dist/src/selected-facets.js +0 -149
  290. package/dist/src/selected-facets.js.map +0 -1
  291. 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
- }