@internetarchive/collection-browser 2.19.1-alpha-webdev7818.0 → 2.20.1-alpha-webdev7822.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.
- package/dist/src/app-root.js +606 -605
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.d.ts +5 -0
- package/dist/src/collection-browser.js +36 -11
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +75 -75
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js +54 -54
- package/dist/src/collection-facets/smart-facets/smart-facet-dropdown.js.map +1 -1
- package/dist/src/collection-facets.js +263 -263
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/expanded-date-picker.js +52 -52
- package/dist/src/expanded-date-picker.js.map +1 -1
- package/dist/src/models.d.ts +13 -0
- package/dist/src/models.js +41 -0
- package/dist/src/models.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +79 -24
- package/dist/src/sort-filter-bar/sort-filter-bar.js +201 -119
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.js +139 -139
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js +118 -118
- package/dist/src/tiles/grid/styles/tile-grid-shared-styles.js.map +1 -1
- package/dist/src/tiles/list/tile-list.js +289 -289
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.js +200 -200
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js +157 -11
- package/dist/test/sort-filter-bar/sort-filter-bar.test.js.map +1 -1
- package/package.json +1 -1
- package/src/app-root.ts +1140 -1140
- package/src/collection-browser.ts +38 -10
- package/src/collection-facets/smart-facets/smart-facet-bar.ts +437 -437
- package/src/collection-facets/smart-facets/smart-facet-dropdown.ts +185 -185
- package/src/collection-facets.ts +990 -990
- package/src/expanded-date-picker.ts +191 -191
- package/src/models.ts +48 -0
- package/src/sort-filter-bar/sort-filter-bar.ts +220 -126
- package/src/tiles/grid/item-tile.ts +339 -339
- package/src/tiles/grid/styles/tile-grid-shared-styles.ts +129 -129
- package/src/tiles/list/tile-list.ts +688 -688
- package/src/tiles/tile-dispatcher.ts +486 -486
- package/test/sort-filter-bar/sort-filter-bar.test.ts +205 -12
- package/tsconfig.json +1 -1
|
@@ -4,7 +4,7 @@ import { html } from 'lit';
|
|
|
4
4
|
import type { IaDropdown } from '@internetarchive/ia-dropdown';
|
|
5
5
|
import { SharedResizeObserver } from '@internetarchive/shared-resize-observer';
|
|
6
6
|
import type { SortFilterBar } from '../../src/sort-filter-bar/sort-filter-bar';
|
|
7
|
-
import
|
|
7
|
+
import { SortField, defaultSortAvailability } from '../../src/models';
|
|
8
8
|
|
|
9
9
|
import '../../src/sort-filter-bar/sort-filter-bar';
|
|
10
10
|
|
|
@@ -47,22 +47,212 @@ describe('Sort selector default buttons', async () => {
|
|
|
47
47
|
expect(sortDirections?.querySelector('.sort-direction-icon')).to.exist;
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
it('
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
it('renders default set of sort options if not overridden', async () => {
|
|
51
|
+
const allSortSelectors = desktopSortSelector?.querySelectorAll(
|
|
52
|
+
'button',
|
|
53
|
+
) as NodeListOf<HTMLButtonElement>;
|
|
54
|
+
expect(allSortSelectors).to.exist;
|
|
55
|
+
expect(allSortSelectors.length).to.equal(3);
|
|
56
|
+
expect(allSortSelectors[0]?.textContent?.trim()).to.equal('Relevance');
|
|
57
|
+
expect(allSortSelectors[1]?.textContent?.trim()).to.equal('Title');
|
|
58
|
+
expect(allSortSelectors[2]?.textContent?.trim()).to.equal('Creator');
|
|
59
|
+
|
|
60
|
+
const allSortDropdowns = desktopSortSelector?.querySelectorAll(
|
|
61
|
+
'ia-dropdown',
|
|
62
|
+
) as NodeListOf<IaDropdown>;
|
|
63
|
+
expect(allSortDropdowns).to.exist;
|
|
64
|
+
expect(allSortDropdowns.length).to.equal(2);
|
|
65
|
+
|
|
66
|
+
expect(allSortDropdowns[0]?.options.length).to.equal(2);
|
|
67
|
+
expect(allSortDropdowns[0]?.options.map(o => o.id)).to.deep.equal([
|
|
68
|
+
SortField.weeklyview,
|
|
69
|
+
SortField.alltimeview,
|
|
70
|
+
]);
|
|
71
|
+
expect(allSortDropdowns[0]?.textContent?.trim()).to.equal('Weekly views');
|
|
72
|
+
|
|
73
|
+
expect(allSortDropdowns[1]?.options.length).to.equal(4);
|
|
74
|
+
expect(allSortDropdowns[1]?.options.map(o => o.id)).to.deep.equal([
|
|
75
|
+
SortField.date,
|
|
76
|
+
SortField.datearchived,
|
|
77
|
+
SortField.datereviewed,
|
|
78
|
+
SortField.dateadded,
|
|
79
|
+
]);
|
|
80
|
+
expect(allSortDropdowns[1]?.textContent?.trim()).to.equal('Date published');
|
|
81
|
+
|
|
82
|
+
// Relevance selected by default
|
|
54
83
|
const defaultSortSelector =
|
|
55
84
|
desktopSortSelector?.querySelector('button.selected');
|
|
56
|
-
expect(defaultSortSelector?.textContent?.trim()).
|
|
85
|
+
expect(defaultSortSelector?.textContent?.trim()).to.equal('Relevance');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('renders an overridden set of sort options if specified', async () => {
|
|
89
|
+
const customSortAvailability: Record<SortField, boolean> = {
|
|
90
|
+
...defaultSortAvailability,
|
|
91
|
+
[SortField.title]: false,
|
|
92
|
+
[SortField.datefavorited]: true,
|
|
93
|
+
[SortField.datearchived]: false,
|
|
94
|
+
[SortField.datereviewed]: false,
|
|
95
|
+
[SortField.creator]: false,
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
el.sortFieldAvailability = customSortAvailability;
|
|
99
|
+
await el.updateComplete;
|
|
100
|
+
|
|
101
|
+
const allSortSelectors = desktopSortSelector?.querySelectorAll(
|
|
102
|
+
'button',
|
|
103
|
+
) as NodeListOf<HTMLButtonElement>;
|
|
104
|
+
expect(allSortSelectors).to.exist;
|
|
105
|
+
expect(allSortSelectors.length).to.equal(1);
|
|
106
|
+
expect(allSortSelectors[0]?.textContent?.trim()).to.equal('Relevance');
|
|
107
|
+
|
|
108
|
+
const allSortDropdowns = desktopSortSelector?.querySelectorAll(
|
|
109
|
+
'ia-dropdown',
|
|
110
|
+
) as NodeListOf<IaDropdown>;
|
|
111
|
+
expect(allSortDropdowns).to.exist;
|
|
112
|
+
expect(allSortDropdowns.length).to.equal(2);
|
|
113
|
+
|
|
114
|
+
expect(allSortDropdowns[0]?.options.length).to.equal(2);
|
|
115
|
+
expect(allSortDropdowns[0]?.options.map(o => o.id)).to.deep.equal([
|
|
116
|
+
SortField.weeklyview,
|
|
117
|
+
SortField.alltimeview,
|
|
118
|
+
]);
|
|
119
|
+
|
|
120
|
+
expect(allSortDropdowns[1]?.options.length).to.equal(3);
|
|
121
|
+
expect(allSortDropdowns[1]?.options.map(o => o.id)).to.deep.equal([
|
|
122
|
+
SortField.datefavorited,
|
|
123
|
+
SortField.date,
|
|
124
|
+
SortField.dateadded,
|
|
125
|
+
]);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('renders a views button instead of a dropdown if it would only have one option', async () => {
|
|
129
|
+
const customSortAvailability: Record<SortField, boolean> = {
|
|
130
|
+
...defaultSortAvailability,
|
|
131
|
+
// Disable weekly views (but keep All-time Views)
|
|
132
|
+
[SortField.weeklyview]: false,
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
el.sortFieldAvailability = customSortAvailability;
|
|
136
|
+
await el.updateComplete;
|
|
137
|
+
|
|
138
|
+
const allSortSelectors = desktopSortSelector?.querySelectorAll(
|
|
139
|
+
'button',
|
|
140
|
+
) as NodeListOf<HTMLButtonElement>;
|
|
141
|
+
expect(allSortSelectors).to.exist;
|
|
142
|
+
expect(allSortSelectors.length).to.equal(4);
|
|
143
|
+
expect(allSortSelectors[0]?.textContent?.trim()).to.equal('Relevance');
|
|
144
|
+
expect(allSortSelectors[1]?.textContent?.trim()).to.equal('All-time views');
|
|
145
|
+
expect(allSortSelectors[2]?.textContent?.trim()).to.equal('Title');
|
|
146
|
+
expect(allSortSelectors[3]?.textContent?.trim()).to.equal('Creator');
|
|
147
|
+
|
|
148
|
+
const allSortDropdowns = desktopSortSelector?.querySelectorAll(
|
|
149
|
+
'ia-dropdown',
|
|
150
|
+
) as NodeListOf<IaDropdown>;
|
|
151
|
+
expect(allSortDropdowns).to.exist;
|
|
152
|
+
expect(allSortDropdowns.length).to.equal(1);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('renders a date button instead of a dropdown if it would only have one option', async () => {
|
|
156
|
+
const customSortAvailability: Record<SortField, boolean> = {
|
|
157
|
+
...defaultSortAvailability,
|
|
158
|
+
// Disable all default dates except Date Added
|
|
159
|
+
[SortField.date]: false,
|
|
160
|
+
[SortField.datearchived]: false,
|
|
161
|
+
[SortField.datereviewed]: false,
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
el.sortFieldAvailability = customSortAvailability;
|
|
165
|
+
await el.updateComplete;
|
|
166
|
+
|
|
167
|
+
const allSortSelectors = desktopSortSelector?.querySelectorAll(
|
|
168
|
+
'button',
|
|
169
|
+
) as NodeListOf<HTMLButtonElement>;
|
|
170
|
+
expect(allSortSelectors).to.exist;
|
|
171
|
+
expect(allSortSelectors.length).to.equal(4);
|
|
172
|
+
expect(allSortSelectors[0]?.textContent?.trim()).to.equal('Relevance');
|
|
173
|
+
expect(allSortSelectors[1]?.textContent?.trim()).to.equal('Title');
|
|
174
|
+
expect(allSortSelectors[2]?.textContent?.trim()).to.equal('Date added');
|
|
175
|
+
expect(allSortSelectors[3]?.textContent?.trim()).to.equal('Creator');
|
|
176
|
+
|
|
177
|
+
const allSortDropdowns = desktopSortSelector?.querySelectorAll(
|
|
178
|
+
'ia-dropdown',
|
|
179
|
+
) as NodeListOf<IaDropdown>;
|
|
180
|
+
expect(allSortDropdowns).to.exist;
|
|
181
|
+
expect(allSortDropdowns.length).to.equal(1);
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it('does not render a views dropdown that would have zero available options', async () => {
|
|
185
|
+
const customSortAvailability: Record<SortField, boolean> = {
|
|
186
|
+
...defaultSortAvailability,
|
|
187
|
+
// Disable all view sorts
|
|
188
|
+
[SortField.weeklyview]: false,
|
|
189
|
+
[SortField.alltimeview]: false,
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
el.sortFieldAvailability = customSortAvailability;
|
|
193
|
+
await el.updateComplete;
|
|
194
|
+
|
|
195
|
+
const allSortSelectors = desktopSortSelector?.querySelectorAll(
|
|
196
|
+
'button',
|
|
197
|
+
) as NodeListOf<HTMLButtonElement>;
|
|
198
|
+
expect(allSortSelectors).to.exist;
|
|
199
|
+
expect(allSortSelectors.length).to.equal(3);
|
|
200
|
+
|
|
201
|
+
const allSortDropdowns = desktopSortSelector?.querySelectorAll(
|
|
202
|
+
'ia-dropdown',
|
|
203
|
+
) as NodeListOf<IaDropdown>;
|
|
204
|
+
expect(allSortDropdowns).to.exist;
|
|
205
|
+
expect(allSortDropdowns.length).to.equal(1);
|
|
206
|
+
expect(allSortDropdowns[0].options?.[0]?.id).to.equal(SortField.date);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
it('does not render a date dropdown that would have zero available options', async () => {
|
|
210
|
+
const customSortAvailability: Record<SortField, boolean> = {
|
|
211
|
+
...defaultSortAvailability,
|
|
212
|
+
// Disable all date sorts
|
|
213
|
+
[SortField.date]: false,
|
|
214
|
+
[SortField.dateadded]: false,
|
|
215
|
+
[SortField.datearchived]: false,
|
|
216
|
+
[SortField.datereviewed]: false,
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
el.sortFieldAvailability = customSortAvailability;
|
|
220
|
+
await el.updateComplete;
|
|
221
|
+
|
|
222
|
+
const allSortSelectors = desktopSortSelector?.querySelectorAll(
|
|
223
|
+
'button',
|
|
224
|
+
) as NodeListOf<HTMLButtonElement>;
|
|
225
|
+
expect(allSortSelectors).to.exist;
|
|
226
|
+
expect(allSortSelectors.length).to.equal(3);
|
|
227
|
+
|
|
228
|
+
const allSortDropdowns = desktopSortSelector?.querySelectorAll(
|
|
229
|
+
'ia-dropdown',
|
|
230
|
+
) as NodeListOf<IaDropdown>;
|
|
231
|
+
expect(allSortDropdowns).to.exist;
|
|
232
|
+
expect(allSortDropdowns.length).to.equal(1);
|
|
233
|
+
expect(allSortDropdowns[0].options?.[0]?.id).to.equal(SortField.weeklyview);
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
it('allows changing the default views sort shown', async () => {
|
|
237
|
+
el.defaultViewSort = SortField.alltimeview;
|
|
238
|
+
await el.updateComplete;
|
|
239
|
+
|
|
240
|
+
const viewsDropdown = el.shadowRoot?.querySelector(
|
|
241
|
+
'#views-dropdown',
|
|
242
|
+
) as IaDropdown;
|
|
243
|
+
expect(viewsDropdown).to.exist;
|
|
244
|
+
expect(viewsDropdown.textContent?.trim()).to.equal('All-time views');
|
|
57
245
|
});
|
|
58
246
|
|
|
59
|
-
it('
|
|
60
|
-
el.
|
|
247
|
+
it('allows changing the default date sort shown', async () => {
|
|
248
|
+
el.defaultDateSort = SortField.datereviewed;
|
|
61
249
|
await el.updateComplete;
|
|
62
250
|
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
251
|
+
const dateDropdown = el.shadowRoot?.querySelector(
|
|
252
|
+
'#date-dropdown',
|
|
253
|
+
) as IaDropdown;
|
|
254
|
+
expect(dateDropdown).to.exist;
|
|
255
|
+
expect(dateDropdown.textContent?.trim()).to.equal('Date reviewed');
|
|
66
256
|
});
|
|
67
257
|
|
|
68
258
|
it('should render default view-sort selector', async () => {
|
|
@@ -158,7 +348,10 @@ describe('Sort selector default buttons', async () => {
|
|
|
158
348
|
});
|
|
159
349
|
|
|
160
350
|
it('handles click event on relevance selector', async () => {
|
|
161
|
-
el.
|
|
351
|
+
el.sortFieldAvailability = {
|
|
352
|
+
...el.sortFieldAvailability,
|
|
353
|
+
[SortField.relevance]: true,
|
|
354
|
+
};
|
|
162
355
|
el.selectedSort = 'title' as SortField;
|
|
163
356
|
await el.updateComplete;
|
|
164
357
|
|