@internetarchive/collection-browser 0.3.5-alpha.1 → 0.3.5

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 (236) hide show
  1. package/.editorconfig +29 -29
  2. package/.github/workflows/ci.yml +26 -26
  3. package/.github/workflows/gh-pages-main.yml +39 -39
  4. package/.github/workflows/npm-publish.yml +39 -39
  5. package/.github/workflows/pr-preview.yml +38 -38
  6. package/.husky/pre-commit +4 -4
  7. package/LICENSE +661 -661
  8. package/README.md +83 -83
  9. package/dist/index.d.ts +9 -9
  10. package/dist/index.js +9 -9
  11. package/dist/src/app-root.d.ts +47 -43
  12. package/dist/src/app-root.js +331 -285
  13. package/dist/src/app-root.js.map +1 -1
  14. package/dist/src/assets/img/icons/arrow-left.d.ts +2 -2
  15. package/dist/src/assets/img/icons/arrow-left.js +2 -2
  16. package/dist/src/assets/img/icons/arrow-right.d.ts +2 -2
  17. package/dist/src/assets/img/icons/arrow-right.js +2 -2
  18. package/dist/src/assets/img/icons/chevron.d.ts +2 -2
  19. package/dist/src/assets/img/icons/chevron.js +2 -2
  20. package/dist/src/assets/img/icons/empty-query.d.ts +2 -2
  21. package/dist/src/assets/img/icons/empty-query.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/software.d.ts +1 -1
  47. package/dist/src/assets/img/icons/mediatype/software.js +2 -2
  48. package/dist/src/assets/img/icons/mediatype/texts.d.ts +1 -1
  49. package/dist/src/assets/img/icons/mediatype/texts.js +2 -2
  50. package/dist/src/assets/img/icons/mediatype/tv.d.ts +1 -1
  51. package/dist/src/assets/img/icons/mediatype/tv.js +2 -2
  52. package/dist/src/assets/img/icons/mediatype/video.d.ts +1 -1
  53. package/dist/src/assets/img/icons/mediatype/video.js +2 -2
  54. package/dist/src/assets/img/icons/mediatype/web.d.ts +1 -1
  55. package/dist/src/assets/img/icons/mediatype/web.js +2 -2
  56. package/dist/src/assets/img/icons/null-result.d.ts +2 -2
  57. package/dist/src/assets/img/icons/null-result.js +2 -2
  58. package/dist/src/assets/img/icons/restricted.d.ts +1 -1
  59. package/dist/src/assets/img/icons/restricted.js +2 -2
  60. package/dist/src/assets/img/icons/reviews.d.ts +1 -1
  61. package/dist/src/assets/img/icons/reviews.js +2 -2
  62. package/dist/src/assets/img/icons/upload.d.ts +1 -1
  63. package/dist/src/assets/img/icons/upload.js +2 -2
  64. package/dist/src/assets/img/icons/views.d.ts +1 -1
  65. package/dist/src/assets/img/icons/views.js +2 -2
  66. package/dist/src/circular-activity-indicator.d.ts +5 -5
  67. package/dist/src/circular-activity-indicator.js +17 -17
  68. package/dist/src/collection-browser.d.ts +246 -245
  69. package/dist/src/collection-browser.js +1370 -1359
  70. package/dist/src/collection-browser.js.map +1 -1
  71. package/dist/src/collection-facets/facet-tombstone-row.d.ts +5 -5
  72. package/dist/src/collection-facets/facet-tombstone-row.js +42 -42
  73. package/dist/src/collection-facets/facet-tombstone-row.js.map +1 -1
  74. package/dist/src/collection-facets/facets-template.d.ts +16 -16
  75. package/dist/src/collection-facets/facets-template.js +130 -128
  76. package/dist/src/collection-facets/facets-template.js.map +1 -1
  77. package/dist/src/collection-facets/more-facets-content.d.ts +76 -76
  78. package/dist/src/collection-facets/more-facets-content.js +353 -353
  79. package/dist/src/collection-facets/more-facets-pagination.d.ts +36 -36
  80. package/dist/src/collection-facets/more-facets-pagination.js +192 -192
  81. package/dist/src/collection-facets.d.ts +77 -77
  82. package/dist/src/collection-facets.js +551 -551
  83. package/dist/src/collection-facets.js.map +1 -1
  84. package/dist/src/empty-placeholder.d.ts +11 -11
  85. package/dist/src/empty-placeholder.js +42 -42
  86. package/dist/src/language-code-handler/language-code-handler.d.ts +37 -37
  87. package/dist/src/language-code-handler/language-code-handler.js +26 -26
  88. package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -1
  89. package/dist/src/language-code-handler/language-code-mapping.js +562 -562
  90. package/dist/src/mediatype/mediatype-config.d.ts +3 -3
  91. package/dist/src/mediatype/mediatype-config.js +85 -85
  92. package/dist/src/models.d.ts +103 -102
  93. package/dist/src/models.js +117 -117
  94. package/dist/src/models.js.map +1 -1
  95. package/dist/src/restoration-state-handler.d.ts +46 -45
  96. package/dist/src/restoration-state-handler.js +230 -220
  97. package/dist/src/restoration-state-handler.js.map +1 -1
  98. package/dist/src/sort-filter-bar/alpha-bar.d.ts +9 -9
  99. package/dist/src/sort-filter-bar/alpha-bar.js +41 -41
  100. package/dist/src/sort-filter-bar/img/compact.d.ts +1 -1
  101. package/dist/src/sort-filter-bar/img/compact.js +2 -2
  102. package/dist/src/sort-filter-bar/img/list.d.ts +1 -1
  103. package/dist/src/sort-filter-bar/img/list.js +2 -2
  104. package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -1
  105. package/dist/src/sort-filter-bar/img/sort-triangle.js +2 -2
  106. package/dist/src/sort-filter-bar/img/tile.d.ts +1 -1
  107. package/dist/src/sort-filter-bar/img/tile.js +2 -2
  108. package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +107 -107
  109. package/dist/src/sort-filter-bar/sort-filter-bar.js +423 -423
  110. package/dist/src/styles/item-image-styles.d.ts +8 -8
  111. package/dist/src/styles/item-image-styles.js +9 -9
  112. package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -5
  113. package/dist/src/tiles/collection-browser-loading-tile.js +15 -15
  114. package/dist/src/tiles/grid/account-tile.d.ts +8 -8
  115. package/dist/src/tiles/grid/account-tile.js +20 -20
  116. package/dist/src/tiles/grid/collection-tile.d.ts +7 -7
  117. package/dist/src/tiles/grid/collection-tile.js +23 -23
  118. package/dist/src/tiles/grid/item-tile.d.ts +24 -24
  119. package/dist/src/tiles/grid/item-tile.js +87 -87
  120. package/dist/src/tiles/grid/tile-stats.d.ts +10 -10
  121. package/dist/src/tiles/grid/tile-stats.js +46 -40
  122. package/dist/src/tiles/grid/tile-stats.js.map +1 -1
  123. package/dist/src/tiles/image-block.d.ts +17 -17
  124. package/dist/src/tiles/image-block.js +69 -69
  125. package/dist/src/tiles/item-image.d.ts +31 -31
  126. package/dist/src/tiles/item-image.js +103 -103
  127. package/dist/src/tiles/list/account-label.d.ts +1 -1
  128. package/dist/src/tiles/list/account-label.js +6 -6
  129. package/dist/src/tiles/list/date-label.d.ts +1 -1
  130. package/dist/src/tiles/list/date-label.js +12 -12
  131. package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -12
  132. package/dist/src/tiles/list/tile-list-compact-header.js +41 -41
  133. package/dist/src/tiles/list/tile-list-compact.d.ts +21 -20
  134. package/dist/src/tiles/list/tile-list-compact.js +94 -90
  135. package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
  136. package/dist/src/tiles/list/tile-list.d.ts +50 -50
  137. package/dist/src/tiles/list/tile-list.js +271 -268
  138. package/dist/src/tiles/list/tile-list.js.map +1 -1
  139. package/dist/src/tiles/mediatype-icon.d.ts +9 -9
  140. package/dist/src/tiles/mediatype-icon.js +49 -47
  141. package/dist/src/tiles/mediatype-icon.js.map +1 -1
  142. package/dist/src/tiles/overlay/icon-overlay.d.ts +7 -7
  143. package/dist/src/tiles/overlay/icon-overlay.js +30 -30
  144. package/dist/src/tiles/overlay/text-overlay.d.ts +8 -8
  145. package/dist/src/tiles/overlay/text-overlay.js +31 -31
  146. package/dist/src/tiles/text-snippet-block.d.ts +29 -29
  147. package/dist/src/tiles/text-snippet-block.js +81 -81
  148. package/dist/src/tiles/tile-dispatcher.d.ts +36 -36
  149. package/dist/src/tiles/tile-dispatcher.js +128 -128
  150. package/dist/src/utils/analytics-events.d.ts +22 -22
  151. package/dist/src/utils/analytics-events.js +24 -24
  152. package/dist/src/utils/format-count.d.ts +7 -7
  153. package/dist/src/utils/format-count.js +76 -76
  154. package/dist/src/utils/format-date.d.ts +2 -2
  155. package/dist/src/utils/format-date.js +23 -23
  156. package/dist/test/collection-browser.test.d.ts +1 -1
  157. package/dist/test/collection-browser.test.js +481 -415
  158. package/dist/test/collection-browser.test.js.map +1 -1
  159. package/dist/test/collection-facets/facets-template.test.d.ts +1 -1
  160. package/dist/test/collection-facets/facets-template.test.js +62 -62
  161. package/dist/test/collection-facets/facets-template.test.js.map +1 -1
  162. package/dist/test/collection-facets/more-facets-content.test.d.ts +1 -1
  163. package/dist/test/collection-facets/more-facets-content.test.js +114 -114
  164. package/dist/test/collection-facets/more-facets-pagination.test.d.ts +1 -1
  165. package/dist/test/collection-facets/more-facets-pagination.test.js +117 -117
  166. package/dist/test/collection-facets.test.d.ts +2 -2
  167. package/dist/test/collection-facets.test.js +498 -498
  168. package/dist/test/empty-placeholder.test.d.ts +1 -1
  169. package/dist/test/empty-placeholder.test.js +33 -33
  170. package/dist/test/icon-overlay.test.d.ts +1 -1
  171. package/dist/test/icon-overlay.test.js +24 -24
  172. package/dist/test/image-block.test.d.ts +1 -1
  173. package/dist/test/image-block.test.js +48 -48
  174. package/dist/test/item-image.test.d.ts +1 -1
  175. package/dist/test/item-image.test.js +56 -56
  176. package/dist/test/mediatype-config.test.d.ts +1 -1
  177. package/dist/test/mediatype-config.test.js +16 -16
  178. package/dist/test/mocks/mock-analytics-handler.d.ts +10 -10
  179. package/dist/test/mocks/mock-analytics-handler.js +15 -15
  180. package/dist/test/mocks/mock-collection-name-cache.d.ts +7 -7
  181. package/dist/test/mocks/mock-collection-name-cache.js +13 -13
  182. package/dist/test/mocks/mock-search-responses.d.ts +8 -8
  183. package/dist/test/mocks/mock-search-responses.js +198 -198
  184. package/dist/test/mocks/mock-search-responses.js.map +1 -1
  185. package/dist/test/mocks/mock-search-service.d.ts +13 -13
  186. package/dist/test/mocks/mock-search-service.js +32 -32
  187. package/dist/test/mocks/mock-search-service.js.map +1 -1
  188. package/dist/test/restoration-state-handler.test.d.ts +1 -1
  189. package/dist/test/restoration-state-handler.test.js +126 -117
  190. package/dist/test/restoration-state-handler.test.js.map +1 -1
  191. package/dist/test/sort-filter-bar/sort-filter-bar.test.d.ts +1 -1
  192. package/dist/test/sort-filter-bar/sort-filter-bar.test.js +113 -113
  193. package/dist/test/text-overlay.test.d.ts +1 -1
  194. package/dist/test/text-overlay.test.js +41 -41
  195. package/dist/test/text-snippet-block.test.d.ts +1 -1
  196. package/dist/test/text-snippet-block.test.js +57 -57
  197. package/dist/test/tile-stats.test.d.ts +1 -1
  198. package/dist/test/tile-stats.test.js +33 -33
  199. package/dist/test/tiles/grid/item-tile.test.d.ts +1 -1
  200. package/dist/test/tiles/grid/item-tile.test.js +107 -107
  201. package/dist/test/tiles/list/tile-list-compact.test.d.ts +1 -1
  202. package/dist/test/tiles/list/tile-list-compact.test.js +125 -26
  203. package/dist/test/tiles/list/tile-list-compact.test.js.map +1 -1
  204. package/dist/test/tiles/list/tile-list.test.d.ts +1 -1
  205. package/dist/test/tiles/list/tile-list.test.js +79 -47
  206. package/dist/test/tiles/list/tile-list.test.js.map +1 -1
  207. package/dist/test/utils/format-count.test.d.ts +1 -1
  208. package/dist/test/utils/format-count.test.js +23 -23
  209. package/dist/test/utils/format-date.test.d.ts +1 -1
  210. package/dist/test/utils/format-date.test.js +17 -17
  211. package/index.html +24 -24
  212. package/local.archive.org.cert +86 -86
  213. package/local.archive.org.key +27 -27
  214. package/package.json +115 -115
  215. package/renovate.json +6 -6
  216. package/src/app-root.ts +104 -55
  217. package/src/collection-browser.ts +1503 -1488
  218. package/src/collection-facets/facet-tombstone-row.ts +40 -40
  219. package/src/collection-facets/facets-template.ts +5 -3
  220. package/src/collection-facets.ts +635 -635
  221. package/src/models.ts +1 -0
  222. package/src/restoration-state-handler.ts +19 -1
  223. package/src/tiles/grid/tile-stats.ts +18 -5
  224. package/src/tiles/list/tile-list-compact.ts +7 -3
  225. package/src/tiles/list/tile-list.ts +6 -1
  226. package/src/tiles/mediatype-icon.ts +2 -0
  227. package/test/collection-browser.test.ts +679 -599
  228. package/test/collection-facets/facets-template.test.ts +5 -3
  229. package/test/mocks/mock-search-responses.ts +226 -226
  230. package/test/mocks/mock-search-service.ts +61 -61
  231. package/test/restoration-state-handler.test.ts +12 -0
  232. package/test/tiles/list/tile-list-compact.test.ts +110 -0
  233. package/test/tiles/list/tile-list.test.ts +36 -0
  234. package/tsconfig.json +21 -21
  235. package/web-dev-server.config.mjs +30 -30
  236. package/web-test-runner.config.mjs +41 -41
@@ -49,17 +49,19 @@ describe('Render facets', () => {
49
49
  expect(el.shadowRoot?.querySelector('.facets-on-modal')).to.exist;
50
50
  });
51
51
 
52
- it('find facet-title and facet-count for perticular facet group', async () => {
52
+ it('find facet-title and facet-count for particular facet group', async () => {
53
53
  const el = await fixture<FacetsTemplate>(
54
54
  html`<facets-template .facetGroup=${facetGroup}></facets-template>`
55
55
  );
56
56
  await el.updateComplete;
57
57
 
58
58
  const facetInfo = el.shadowRoot?.querySelector('.facet-info-display');
59
- expect(facetInfo?.querySelector('.facet-title')?.textContent).equal(
59
+ expect(facetInfo?.querySelector('.facet-title')?.textContent).to.equal(
60
60
  'audio'
61
61
  );
62
- expect(facetInfo?.querySelector('.facet-count')?.textContent).equal('1001');
62
+ expect(
63
+ facetInfo?.querySelector('.facet-count')?.textContent?.trim()
64
+ ).to.equal('1,001');
63
65
  });
64
66
 
65
67
  it('find the hidden facet item', async () => {
@@ -1,226 +1,226 @@
1
- import type { Result } from '@internetarchive/result-type';
2
- import {
3
- ItemHit,
4
- SearchResponse,
5
- SearchServiceError,
6
- } from '@internetarchive/search-service';
7
-
8
- export const mockSuccessSingleResult: Result<
9
- SearchResponse,
10
- SearchServiceError
11
- > = {
12
- success: {
13
- request: {
14
- clientParameters: {
15
- user_query: 'collection:foo',
16
- sort: [],
17
- },
18
- finalizedParameters: {
19
- user_query: 'collection:foo',
20
- sort: [],
21
- },
22
- },
23
- rawResponse: {},
24
- response: {
25
- totalResults: 1,
26
- returnedCount: 1,
27
- results: [
28
- new ItemHit({
29
- fields: {
30
- identifier: 'foo',
31
- collection: ['foo', 'bar'],
32
- },
33
- }),
34
- ],
35
- },
36
- responseHeader: {
37
- succeeded: true,
38
- query_time: 0,
39
- },
40
- },
41
- };
42
-
43
- export const mockSuccessLoggedInResult: Result<
44
- SearchResponse,
45
- SearchServiceError
46
- > = {
47
- success: {
48
- request: {
49
- clientParameters: {
50
- user_query: 'loggedin',
51
- sort: [],
52
- },
53
- finalizedParameters: {
54
- user_query: 'loggedin',
55
- sort: [],
56
- },
57
- },
58
- rawResponse: {},
59
- response: {
60
- totalResults: 1,
61
- returnedCount: 1,
62
- results: [
63
- new ItemHit({
64
- fields: {
65
- identifier: 'foo',
66
- collection: ['foo', 'loggedin', 'bar'],
67
- title: 'foo',
68
- mediatype: 'data',
69
- },
70
- }),
71
- ],
72
- },
73
- responseHeader: {
74
- succeeded: true,
75
- query_time: 0,
76
- },
77
- },
78
- };
79
-
80
- export const mockSuccessNoPreviewResult: Result<
81
- SearchResponse,
82
- SearchServiceError
83
- > = {
84
- success: {
85
- request: {
86
- clientParameters: {
87
- user_query: 'no-preview',
88
- sort: [],
89
- },
90
- finalizedParameters: {
91
- user_query: 'no-preview',
92
- sort: [],
93
- },
94
- },
95
- rawResponse: {},
96
- response: {
97
- totalResults: 1,
98
- returnedCount: 1,
99
- results: [
100
- new ItemHit({
101
- fields: {
102
- identifier: 'foo',
103
- collection: ['foo', 'no-preview', 'bar'],
104
- },
105
- }),
106
- ],
107
- },
108
- responseHeader: {
109
- succeeded: true,
110
- query_time: 0,
111
- },
112
- },
113
- };
114
-
115
- export const mockSuccessLoggedInAndNoPreviewResult: Result<
116
- SearchResponse,
117
- SearchServiceError
118
- > = {
119
- success: {
120
- request: {
121
- clientParameters: {
122
- user_query: 'loggedin-no-preview',
123
- sort: [],
124
- },
125
- finalizedParameters: {
126
- user_query: 'loggedin-no-preview',
127
- sort: [],
128
- },
129
- },
130
- rawResponse: {},
131
- response: {
132
- totalResults: 1,
133
- returnedCount: 1,
134
- results: [
135
- new ItemHit({
136
- fields: {
137
- identifier: 'foo',
138
- collection: ['foo', 'loggedin', 'no-preview', 'bar'],
139
- },
140
- }),
141
- ],
142
- },
143
- responseHeader: {
144
- succeeded: true,
145
- query_time: 0,
146
- },
147
- },
148
- };
149
-
150
- export const getMockSuccessSingleResultWithSort: (
151
- resultsSpy: Function
152
- ) => Result<SearchResponse, SearchServiceError> = (resultsSpy: Function) => ({
153
- success: {
154
- request: {
155
- clientParameters: {
156
- user_query: 'with-sort',
157
- sort: ['foo:asc'],
158
- },
159
- finalizedParameters: {
160
- user_query: 'with-sort',
161
- sort: ['foo:asc'],
162
- },
163
- },
164
- rawResponse: {},
165
- response: {
166
- totalResults: 1,
167
- returnedCount: 1,
168
- get results() {
169
- resultsSpy();
170
- return [
171
- new ItemHit({
172
- fields: {
173
- identifier: 'foo',
174
- collection: ['foo', 'bar'],
175
- },
176
- }),
177
- ];
178
- },
179
- },
180
- responseHeader: {
181
- succeeded: true,
182
- query_time: 0,
183
- },
184
- },
185
- });
186
-
187
- export const mockSuccessMultipleResults: Result<
188
- SearchResponse,
189
- SearchServiceError
190
- > = {
191
- success: {
192
- request: {
193
- clientParameters: {
194
- user_query: 'collection:foo',
195
- sort: [],
196
- },
197
- finalizedParameters: {
198
- user_query: 'collection:foo',
199
- sort: [],
200
- },
201
- },
202
- rawResponse: {},
203
- response: {
204
- totalResults: 2,
205
- returnedCount: 2,
206
- results: [
207
- new ItemHit({
208
- fields: {
209
- identifier: 'foo',
210
- collection: ['foo', 'bar'],
211
- },
212
- }),
213
- new ItemHit({
214
- fields: {
215
- identifier: 'bar',
216
- collection: ['baz', 'boop'],
217
- },
218
- }),
219
- ],
220
- },
221
- responseHeader: {
222
- succeeded: true,
223
- query_time: 0,
224
- },
225
- },
226
- };
1
+ import type { Result } from '@internetarchive/result-type';
2
+ import {
3
+ ItemHit,
4
+ SearchResponse,
5
+ SearchServiceError,
6
+ } from '@internetarchive/search-service';
7
+
8
+ export const mockSuccessSingleResult: Result<
9
+ SearchResponse,
10
+ SearchServiceError
11
+ > = {
12
+ success: {
13
+ request: {
14
+ clientParameters: {
15
+ user_query: 'collection:foo',
16
+ sort: [],
17
+ },
18
+ finalizedParameters: {
19
+ user_query: 'collection:foo',
20
+ sort: [],
21
+ },
22
+ },
23
+ rawResponse: {},
24
+ response: {
25
+ totalResults: 1,
26
+ returnedCount: 1,
27
+ results: [
28
+ new ItemHit({
29
+ fields: {
30
+ identifier: 'foo',
31
+ collection: ['foo', 'bar'],
32
+ },
33
+ }),
34
+ ],
35
+ },
36
+ responseHeader: {
37
+ succeeded: true,
38
+ query_time: 0,
39
+ },
40
+ },
41
+ };
42
+
43
+ export const mockSuccessLoggedInResult: Result<
44
+ SearchResponse,
45
+ SearchServiceError
46
+ > = {
47
+ success: {
48
+ request: {
49
+ clientParameters: {
50
+ user_query: 'loggedin',
51
+ sort: [],
52
+ },
53
+ finalizedParameters: {
54
+ user_query: 'loggedin',
55
+ sort: [],
56
+ },
57
+ },
58
+ rawResponse: {},
59
+ response: {
60
+ totalResults: 1,
61
+ returnedCount: 1,
62
+ results: [
63
+ new ItemHit({
64
+ fields: {
65
+ identifier: 'foo',
66
+ collection: ['foo', 'loggedin', 'bar'],
67
+ title: 'foo',
68
+ mediatype: 'data',
69
+ },
70
+ }),
71
+ ],
72
+ },
73
+ responseHeader: {
74
+ succeeded: true,
75
+ query_time: 0,
76
+ },
77
+ },
78
+ };
79
+
80
+ export const mockSuccessNoPreviewResult: Result<
81
+ SearchResponse,
82
+ SearchServiceError
83
+ > = {
84
+ success: {
85
+ request: {
86
+ clientParameters: {
87
+ user_query: 'no-preview',
88
+ sort: [],
89
+ },
90
+ finalizedParameters: {
91
+ user_query: 'no-preview',
92
+ sort: [],
93
+ },
94
+ },
95
+ rawResponse: {},
96
+ response: {
97
+ totalResults: 1,
98
+ returnedCount: 1,
99
+ results: [
100
+ new ItemHit({
101
+ fields: {
102
+ identifier: 'foo',
103
+ collection: ['foo', 'no-preview', 'bar'],
104
+ },
105
+ }),
106
+ ],
107
+ },
108
+ responseHeader: {
109
+ succeeded: true,
110
+ query_time: 0,
111
+ },
112
+ },
113
+ };
114
+
115
+ export const mockSuccessLoggedInAndNoPreviewResult: Result<
116
+ SearchResponse,
117
+ SearchServiceError
118
+ > = {
119
+ success: {
120
+ request: {
121
+ clientParameters: {
122
+ user_query: 'loggedin-no-preview',
123
+ sort: [],
124
+ },
125
+ finalizedParameters: {
126
+ user_query: 'loggedin-no-preview',
127
+ sort: [],
128
+ },
129
+ },
130
+ rawResponse: {},
131
+ response: {
132
+ totalResults: 1,
133
+ returnedCount: 1,
134
+ results: [
135
+ new ItemHit({
136
+ fields: {
137
+ identifier: 'foo',
138
+ collection: ['foo', 'loggedin', 'no-preview', 'bar'],
139
+ },
140
+ }),
141
+ ],
142
+ },
143
+ responseHeader: {
144
+ succeeded: true,
145
+ query_time: 0,
146
+ },
147
+ },
148
+ };
149
+
150
+ export const getMockSuccessSingleResultWithSort: (
151
+ resultsSpy: Function
152
+ ) => Result<SearchResponse, SearchServiceError> = (resultsSpy: Function) => ({
153
+ success: {
154
+ request: {
155
+ clientParameters: {
156
+ user_query: 'with-sort',
157
+ sort: ['foo:asc'],
158
+ },
159
+ finalizedParameters: {
160
+ user_query: 'with-sort',
161
+ sort: ['foo:asc'],
162
+ },
163
+ },
164
+ rawResponse: {},
165
+ response: {
166
+ totalResults: 1,
167
+ returnedCount: 1,
168
+ get results() {
169
+ resultsSpy();
170
+ return [
171
+ new ItemHit({
172
+ fields: {
173
+ identifier: 'foo',
174
+ collection: ['foo', 'bar'],
175
+ },
176
+ }),
177
+ ];
178
+ },
179
+ },
180
+ responseHeader: {
181
+ succeeded: true,
182
+ query_time: 0,
183
+ },
184
+ },
185
+ });
186
+
187
+ export const mockSuccessMultipleResults: Result<
188
+ SearchResponse,
189
+ SearchServiceError
190
+ > = {
191
+ success: {
192
+ request: {
193
+ clientParameters: {
194
+ user_query: 'collection:foo',
195
+ sort: [],
196
+ },
197
+ finalizedParameters: {
198
+ user_query: 'collection:foo',
199
+ sort: [],
200
+ },
201
+ },
202
+ rawResponse: {},
203
+ response: {
204
+ totalResults: 2,
205
+ returnedCount: 2,
206
+ results: [
207
+ new ItemHit({
208
+ fields: {
209
+ identifier: 'foo',
210
+ collection: ['foo', 'bar'],
211
+ },
212
+ }),
213
+ new ItemHit({
214
+ fields: {
215
+ identifier: 'bar',
216
+ collection: ['baz', 'boop'],
217
+ },
218
+ }),
219
+ ],
220
+ },
221
+ responseHeader: {
222
+ succeeded: true,
223
+ query_time: 0,
224
+ },
225
+ },
226
+ };
@@ -1,61 +1,61 @@
1
- import type { Result } from '@internetarchive/result-type';
2
- import type {
3
- SearchParams,
4
- SearchResponse,
5
- SearchServiceInterface,
6
- SearchServiceError,
7
- SearchType,
8
- } from '@internetarchive/search-service';
9
- import {
10
- mockSuccessSingleResult,
11
- mockSuccessMultipleResults,
12
- getMockSuccessSingleResultWithSort,
13
- mockSuccessLoggedInResult,
14
- mockSuccessNoPreviewResult,
15
- mockSuccessLoggedInAndNoPreviewResult,
16
- } from './mock-search-responses';
17
-
18
- export class MockSearchService implements SearchServiceInterface {
19
- searchParams?: SearchParams;
20
-
21
- searchType?: SearchType;
22
-
23
- asyncResponse: boolean;
24
-
25
- resultsSpy: Function;
26
-
27
- constructor({ asyncResponse = false, resultsSpy = () => {} } = {}) {
28
- this.asyncResponse = asyncResponse;
29
- this.resultsSpy = resultsSpy;
30
- }
31
-
32
- async search(
33
- params: SearchParams,
34
- searchType: SearchType
35
- ): Promise<Result<SearchResponse, SearchServiceError>> {
36
- this.searchParams = params;
37
- this.searchType = searchType;
38
-
39
- if (this.asyncResponse) {
40
- // Add an artificial 1-tick delay
41
- await new Promise(res => {
42
- setTimeout(res, 0);
43
- });
44
- }
45
-
46
- switch (this.searchParams?.query) {
47
- case 'single-result':
48
- return mockSuccessSingleResult;
49
- case 'loggedin':
50
- return mockSuccessLoggedInResult;
51
- case 'no-preview':
52
- return mockSuccessNoPreviewResult;
53
- case 'loggedin-no-preview':
54
- return mockSuccessLoggedInAndNoPreviewResult;
55
- case 'with-sort':
56
- return getMockSuccessSingleResultWithSort(this.resultsSpy);
57
- default:
58
- return mockSuccessMultipleResults;
59
- }
60
- }
61
- }
1
+ import type { Result } from '@internetarchive/result-type';
2
+ import type {
3
+ SearchParams,
4
+ SearchResponse,
5
+ SearchServiceInterface,
6
+ SearchServiceError,
7
+ SearchType,
8
+ } from '@internetarchive/search-service';
9
+ import {
10
+ mockSuccessSingleResult,
11
+ mockSuccessMultipleResults,
12
+ getMockSuccessSingleResultWithSort,
13
+ mockSuccessLoggedInResult,
14
+ mockSuccessNoPreviewResult,
15
+ mockSuccessLoggedInAndNoPreviewResult,
16
+ } from './mock-search-responses';
17
+
18
+ export class MockSearchService implements SearchServiceInterface {
19
+ searchParams?: SearchParams;
20
+
21
+ searchType?: SearchType;
22
+
23
+ asyncResponse: boolean;
24
+
25
+ resultsSpy: Function;
26
+
27
+ constructor({ asyncResponse = false, resultsSpy = () => {} } = {}) {
28
+ this.asyncResponse = asyncResponse;
29
+ this.resultsSpy = resultsSpy;
30
+ }
31
+
32
+ async search(
33
+ params: SearchParams,
34
+ searchType: SearchType
35
+ ): Promise<Result<SearchResponse, SearchServiceError>> {
36
+ this.searchParams = params;
37
+ this.searchType = searchType;
38
+
39
+ if (this.asyncResponse) {
40
+ // Add an artificial 1-tick delay
41
+ await new Promise(res => {
42
+ setTimeout(res, 0);
43
+ });
44
+ }
45
+
46
+ switch (this.searchParams?.query) {
47
+ case 'single-result':
48
+ return mockSuccessSingleResult;
49
+ case 'loggedin':
50
+ return mockSuccessLoggedInResult;
51
+ case 'no-preview':
52
+ return mockSuccessNoPreviewResult;
53
+ case 'loggedin-no-preview':
54
+ return mockSuccessLoggedInAndNoPreviewResult;
55
+ case 'with-sort':
56
+ return getMockSuccessSingleResultWithSort(this.resultsSpy);
57
+ default:
58
+ return mockSuccessMultipleResults;
59
+ }
60
+ }
61
+ }
@@ -1,3 +1,4 @@
1
+ import { SearchType } from '@internetarchive/search-service';
1
2
  import { expect } from '@open-wc/testing';
2
3
  import { RestorationStateHandler } from '../src/restoration-state-handler';
3
4
 
@@ -13,6 +14,17 @@ describe('Restoration state handler', () => {
13
14
  expect(restorationState.baseQuery).to.equal('boop');
14
15
  });
15
16
 
17
+ it('should restore full text search type from URL', async () => {
18
+ const handler = new RestorationStateHandler({ context: 'search' });
19
+
20
+ const url = new URL(window.location.href);
21
+ url.search = '?sin=TXT';
22
+ window.history.replaceState({ path: url.href }, '', url.href);
23
+
24
+ const restorationState = handler.getRestorationState();
25
+ expect(restorationState.searchType).to.equal(SearchType.FULLTEXT);
26
+ });
27
+
16
28
  it('should restore page number from URL', async () => {
17
29
  const handler = new RestorationStateHandler({ context: 'search' });
18
30