@internetarchive/collection-browser 2.13.1 → 2.13.2-alpha-webdev5427.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.d.ts +1 -0
- package/dist/src/app-root.js +48 -2
- package/dist/src/app-root.js.map +1 -1
- package/dist/src/collection-browser.js +13 -4
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets/facet-row.js +7 -1
- package/dist/src/collection-facets/facet-row.js.map +1 -1
- package/dist/src/collection-facets/more-facets-content.d.ts +1 -0
- package/dist/src/collection-facets/more-facets-content.js +19 -4
- package/dist/src/collection-facets/more-facets-content.js.map +1 -1
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js +4 -3
- package/dist/src/collection-facets/smart-facets/smart-facet-bar.js.map +1 -1
- package/dist/src/collection-facets.d.ts +3 -1
- package/dist/src/collection-facets.js +37 -7
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/data-source/collection-browser-data-source.js +11 -11
- package/dist/src/data-source/collection-browser-data-source.js.map +1 -1
- package/dist/src/expanded-date-picker.d.ts +1 -0
- package/dist/src/expanded-date-picker.js +7 -1
- package/dist/src/expanded-date-picker.js.map +1 -1
- package/dist/src/models.d.ts +23 -5
- package/dist/src/models.js +65 -3
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.js +8 -3
- package/dist/src/restoration-state-handler.js.map +1 -1
- package/dist/src/utils/facet-utils.js +8 -2
- package/dist/src/utils/facet-utils.js.map +1 -1
- package/dist/test/collection-facets.test.js +27 -0
- package/dist/test/collection-facets.test.js.map +1 -1
- package/dist/test/restoration-state-handler.test.js +17 -10
- package/dist/test/restoration-state-handler.test.js.map +1 -1
- package/dist/test/tiles/{mediatype-icon.test.js → tile-mediatype-icon.test.js} +1 -1
- package/dist/test/tiles/tile-mediatype-icon.test.js.map +1 -0
- package/package.json +1 -1
- package/src/app-root.ts +49 -2
- package/src/collection-browser.ts +16 -3
- package/src/collection-facets/facet-row.ts +8 -1
- package/src/collection-facets/more-facets-content.ts +21 -5
- package/src/collection-facets/smart-facets/smart-facet-bar.ts +2 -2
- package/src/collection-facets.ts +37 -8
- package/src/data-source/collection-browser-data-source.ts +18 -13
- package/src/expanded-date-picker.ts +5 -1
- package/src/models.ts +83 -10
- package/src/restoration-state-handler.ts +8 -1
- package/src/utils/facet-utils.ts +5 -3
- package/test/collection-facets.test.ts +33 -0
- package/test/restoration-state-handler.test.ts +10 -10
- package/dist/test/tiles/mediatype-icon.test.js.map +0 -1
- /package/dist/test/tiles/{mediatype-icon.test.d.ts → tile-mediatype-icon.test.d.ts} +0 -0
- /package/test/tiles/{mediatype-icon.test.ts → tile-mediatype-icon.test.ts} +0 -0
|
@@ -690,27 +690,32 @@ export class CollectionBrowserDataSource
|
|
|
690
690
|
get filterMap(): FilterMap {
|
|
691
691
|
const builder = new FilterMapBuilder();
|
|
692
692
|
|
|
693
|
-
|
|
694
|
-
|
|
693
|
+
const {
|
|
694
|
+
minSelectedDate,
|
|
695
|
+
maxSelectedDate,
|
|
696
|
+
selectedFacets,
|
|
697
|
+
selectedTitleFilter,
|
|
698
|
+
selectedCreatorFilter,
|
|
699
|
+
} = this.host;
|
|
700
|
+
|
|
701
|
+
if (minSelectedDate) {
|
|
695
702
|
builder.addFilter(
|
|
696
703
|
'year',
|
|
697
|
-
|
|
704
|
+
minSelectedDate,
|
|
698
705
|
FilterConstraint.GREATER_OR_EQUAL,
|
|
699
706
|
);
|
|
700
707
|
}
|
|
701
|
-
if (
|
|
708
|
+
if (maxSelectedDate) {
|
|
702
709
|
builder.addFilter(
|
|
703
710
|
'year',
|
|
704
|
-
|
|
711
|
+
maxSelectedDate,
|
|
705
712
|
FilterConstraint.LESS_OR_EQUAL,
|
|
706
713
|
);
|
|
707
714
|
}
|
|
708
715
|
|
|
709
716
|
// Add any selected facets
|
|
710
|
-
if (
|
|
711
|
-
for (const [facetName, facetValues] of Object.entries(
|
|
712
|
-
this.host.selectedFacets,
|
|
713
|
-
)) {
|
|
717
|
+
if (selectedFacets) {
|
|
718
|
+
for (const [facetName, facetValues] of Object.entries(selectedFacets)) {
|
|
714
719
|
const { name, values } = this.prepareFacetForFetch(
|
|
715
720
|
facetName,
|
|
716
721
|
facetValues,
|
|
@@ -731,17 +736,17 @@ export class CollectionBrowserDataSource
|
|
|
731
736
|
}
|
|
732
737
|
|
|
733
738
|
// Add any letter filters
|
|
734
|
-
if (
|
|
739
|
+
if (selectedTitleFilter) {
|
|
735
740
|
builder.addFilter(
|
|
736
741
|
'firstTitle',
|
|
737
|
-
|
|
742
|
+
selectedTitleFilter,
|
|
738
743
|
FilterConstraint.INCLUDE,
|
|
739
744
|
);
|
|
740
745
|
}
|
|
741
|
-
if (
|
|
746
|
+
if (selectedCreatorFilter) {
|
|
742
747
|
builder.addFilter(
|
|
743
748
|
'firstCreator',
|
|
744
|
-
|
|
749
|
+
selectedCreatorFilter,
|
|
745
750
|
FilterConstraint.INCLUDE,
|
|
746
751
|
);
|
|
747
752
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { css, html, LitElement, CSSResultGroup, TemplateResult } from 'lit';
|
|
2
2
|
import { customElement, property } from 'lit/decorators.js';
|
|
3
|
+
import { msg } from '@lit/localize';
|
|
3
4
|
import type { ModalManagerInterface } from '@internetarchive/modal-manager';
|
|
4
5
|
import type { AnalyticsManagerInterface } from '@internetarchive/analytics-manager';
|
|
5
6
|
import {
|
|
@@ -19,6 +20,8 @@ export class ExpandedDatePicker extends LitElement {
|
|
|
19
20
|
|
|
20
21
|
@property({ type: Array }) buckets?: number[];
|
|
21
22
|
|
|
23
|
+
@property({ type: String }) dateFormat: string = 'YYYY';
|
|
24
|
+
|
|
22
25
|
@property({ type: Object, attribute: false })
|
|
23
26
|
modalManager?: ModalManagerInterface;
|
|
24
27
|
|
|
@@ -34,6 +37,7 @@ export class ExpandedDatePicker extends LitElement {
|
|
|
34
37
|
.maxDate=${this.maxDate}
|
|
35
38
|
.minSelectedDate=${this.minSelectedDate ?? this.minDate}
|
|
36
39
|
.maxSelectedDate=${this.maxSelectedDate ?? this.maxDate}
|
|
40
|
+
.dateFormat=${this.dateFormat}
|
|
37
41
|
.updateDelay=${0}
|
|
38
42
|
updateWhileFocused
|
|
39
43
|
missingDataMessage="..."
|
|
@@ -47,7 +51,7 @@ export class ExpandedDatePicker extends LitElement {
|
|
|
47
51
|
slot="inputs-right-side"
|
|
48
52
|
@click=${this.applyBtnClicked}
|
|
49
53
|
>
|
|
50
|
-
Apply date range
|
|
54
|
+
${msg('Apply date range')}
|
|
51
55
|
</button>
|
|
52
56
|
</histogram-date-range>
|
|
53
57
|
</div>
|
package/src/models.ts
CHANGED
|
@@ -564,18 +564,24 @@ export type FacetOption =
|
|
|
564
564
|
| 'language'
|
|
565
565
|
| 'creator'
|
|
566
566
|
| 'collection'
|
|
567
|
-
| 'year'
|
|
567
|
+
| 'year'
|
|
568
|
+
// TV-specific facet options:
|
|
569
|
+
| 'program'
|
|
570
|
+
| 'person'
|
|
571
|
+
| 'sponsor';
|
|
568
572
|
|
|
569
573
|
export type SelectedFacetState = 'selected' | 'hidden';
|
|
570
574
|
|
|
571
575
|
export type FacetState = SelectedFacetState | 'none';
|
|
572
576
|
|
|
573
577
|
export interface FacetBucket {
|
|
574
|
-
// for some facets, we augment the key with a display value
|
|
575
|
-
displayText?: string;
|
|
576
578
|
key: string;
|
|
577
579
|
count: number;
|
|
578
580
|
state: FacetState;
|
|
581
|
+
// for some facets, we augment the key with a display value
|
|
582
|
+
displayText?: string;
|
|
583
|
+
// for TV channel facets, we add a parenthesized secondary name
|
|
584
|
+
extraNote?: string;
|
|
579
585
|
}
|
|
580
586
|
|
|
581
587
|
export interface FacetGroup {
|
|
@@ -605,12 +611,11 @@ export type FacetEventDetails = {
|
|
|
605
611
|
|
|
606
612
|
export type FacetValue = string;
|
|
607
613
|
|
|
608
|
-
export type SelectedFacets =
|
|
609
|
-
FacetOption,
|
|
610
|
-
Record<FacetValue, FacetBucket>
|
|
614
|
+
export type SelectedFacets = Partial<
|
|
615
|
+
Record<FacetOption, Record<FacetValue, FacetBucket>>
|
|
611
616
|
>;
|
|
612
617
|
|
|
613
|
-
export const getDefaultSelectedFacets = (): SelectedFacets => ({
|
|
618
|
+
export const getDefaultSelectedFacets = (): Required<SelectedFacets> => ({
|
|
614
619
|
subject: {},
|
|
615
620
|
lending: {},
|
|
616
621
|
mediatype: {},
|
|
@@ -618,9 +623,15 @@ export const getDefaultSelectedFacets = (): SelectedFacets => ({
|
|
|
618
623
|
creator: {},
|
|
619
624
|
collection: {},
|
|
620
625
|
year: {},
|
|
626
|
+
program: {},
|
|
627
|
+
person: {},
|
|
628
|
+
sponsor: {},
|
|
621
629
|
});
|
|
622
630
|
|
|
623
|
-
|
|
631
|
+
/**
|
|
632
|
+
* Facet display order when presenting results for all search types *except* TV (see below).
|
|
633
|
+
*/
|
|
634
|
+
export const defaultFacetDisplayOrder: FacetOption[] = [
|
|
624
635
|
'mediatype',
|
|
625
636
|
// 'lending', Commenting this out removes the lending facet from the sidebar for now
|
|
626
637
|
'year',
|
|
@@ -630,6 +641,23 @@ export const facetDisplayOrder: FacetOption[] = [
|
|
|
630
641
|
'language',
|
|
631
642
|
];
|
|
632
643
|
|
|
644
|
+
/**
|
|
645
|
+
* Specialized facet ordering when displaying TV search results
|
|
646
|
+
*/
|
|
647
|
+
export const tvFacetDisplayOrder: FacetOption[] = [
|
|
648
|
+
'program',
|
|
649
|
+
'creator',
|
|
650
|
+
'year',
|
|
651
|
+
'subject',
|
|
652
|
+
'collection',
|
|
653
|
+
'person',
|
|
654
|
+
'sponsor',
|
|
655
|
+
'language',
|
|
656
|
+
];
|
|
657
|
+
|
|
658
|
+
/**
|
|
659
|
+
* Human-readable titles for each facet group.
|
|
660
|
+
*/
|
|
633
661
|
export const facetTitles: Record<FacetOption, string> = {
|
|
634
662
|
subject: 'Subject',
|
|
635
663
|
lending: 'Availability',
|
|
@@ -638,6 +666,9 @@ export const facetTitles: Record<FacetOption, string> = {
|
|
|
638
666
|
creator: 'Creator',
|
|
639
667
|
collection: 'Collection',
|
|
640
668
|
year: 'Year',
|
|
669
|
+
program: 'Program',
|
|
670
|
+
person: 'Person',
|
|
671
|
+
sponsor: 'Sponsor',
|
|
641
672
|
};
|
|
642
673
|
|
|
643
674
|
/**
|
|
@@ -650,7 +681,10 @@ export const defaultFacetSort: Record<FacetOption, AggregationSortType> = {
|
|
|
650
681
|
language: AggregationSortType.COUNT,
|
|
651
682
|
creator: AggregationSortType.COUNT,
|
|
652
683
|
collection: AggregationSortType.COUNT,
|
|
653
|
-
year: AggregationSortType.NUMERIC,
|
|
684
|
+
year: AggregationSortType.NUMERIC, // Year facets are ordered by their numeric value by default
|
|
685
|
+
program: AggregationSortType.COUNT,
|
|
686
|
+
person: AggregationSortType.COUNT,
|
|
687
|
+
sponsor: AggregationSortType.COUNT,
|
|
654
688
|
};
|
|
655
689
|
|
|
656
690
|
/**
|
|
@@ -664,9 +698,48 @@ export const valueFacetSort: Record<FacetOption, AggregationSortType> = {
|
|
|
664
698
|
language: AggregationSortType.ALPHABETICAL,
|
|
665
699
|
creator: AggregationSortType.ALPHABETICAL,
|
|
666
700
|
collection: AggregationSortType.ALPHABETICAL,
|
|
667
|
-
year: AggregationSortType.NUMERIC,
|
|
701
|
+
year: AggregationSortType.NUMERIC, // Year facets' values should be compared numerically, not lexicographically (year 2001 > year 3)
|
|
702
|
+
program: AggregationSortType.ALPHABETICAL,
|
|
703
|
+
person: AggregationSortType.ALPHABETICAL,
|
|
704
|
+
sponsor: AggregationSortType.ALPHABETICAL,
|
|
668
705
|
};
|
|
669
706
|
|
|
707
|
+
/**
|
|
708
|
+
* Extra parenthesized labels to show next to certain TV channel facets
|
|
709
|
+
*
|
|
710
|
+
* TODO: This is only needed until we can receive the appropriate mapping via PPS,
|
|
711
|
+
* and can be removed/replaced once that is set up.
|
|
712
|
+
*/
|
|
713
|
+
export const tvChannelFacetLabels: Record<string, string> = Object.fromEntries(
|
|
714
|
+
// prettier-ignore
|
|
715
|
+
Object.entries({
|
|
716
|
+
'Al Jazeera' : ['ALJAZAM', 'ALJAZ'],
|
|
717
|
+
'Bloomberg' : ['BLOOMBERG'],
|
|
718
|
+
'BBC' : ['BBC', 'BBC1', 'BBC2'],
|
|
719
|
+
'BBC America' : ['BBCAMERICA'],
|
|
720
|
+
'BBC News' : ['BBCNEWS'],
|
|
721
|
+
'GB News' : ['GBN'],
|
|
722
|
+
'BET' : ['BETW'],
|
|
723
|
+
'CNBC' : ['CNBC'],
|
|
724
|
+
'CNN' : ['CNNW', 'CNN'],
|
|
725
|
+
'Comedy Central' : ['COM', 'COMW'],
|
|
726
|
+
'CSPAN' : ['CSPAN', 'CSPAN2', 'CSPAN3'],
|
|
727
|
+
'Current' : ['CURRENT'],
|
|
728
|
+
'Deutsche Welle' : ['DW'],
|
|
729
|
+
'France 24' : ['FRANCE24'],
|
|
730
|
+
'FOX Business' : ['FBC'],
|
|
731
|
+
'FOX News' : ['FOXNEWSW', 'FOXNEWS'],
|
|
732
|
+
'LINKTV' : ['LINKTV'],
|
|
733
|
+
'MSNBC' : ['MSNBCW', 'MSNBC'],
|
|
734
|
+
'NHK World' : ['NHK'],
|
|
735
|
+
'RT' : ['RT'],
|
|
736
|
+
'Sky News' : ['SKY'],
|
|
737
|
+
}).reduce(
|
|
738
|
+
(acc, [label, channels]) => acc.concat(channels.map(ch => [ch, label])),
|
|
739
|
+
[] as [string, string][],
|
|
740
|
+
),
|
|
741
|
+
);
|
|
742
|
+
|
|
670
743
|
export type LendingFacetKey =
|
|
671
744
|
| 'is_lendable'
|
|
672
745
|
| 'is_borrowable'
|
|
@@ -185,10 +185,16 @@ export class RestorationStateHandler
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
|
|
188
|
+
const dateField =
|
|
189
|
+
state.minSelectedDate?.includes('-') ||
|
|
190
|
+
state.maxSelectedDate?.includes('-')
|
|
191
|
+
? 'date'
|
|
192
|
+
: 'year';
|
|
193
|
+
|
|
188
194
|
if (state.minSelectedDate && state.maxSelectedDate) {
|
|
189
195
|
newParams.append(
|
|
190
196
|
'and[]',
|
|
191
|
-
|
|
197
|
+
`${dateField}:[${state.minSelectedDate} TO ${state.maxSelectedDate}]`,
|
|
192
198
|
);
|
|
193
199
|
}
|
|
194
200
|
|
|
@@ -337,6 +343,7 @@ export class RestorationStateHandler
|
|
|
337
343
|
}
|
|
338
344
|
|
|
339
345
|
switch (field) {
|
|
346
|
+
case 'date':
|
|
340
347
|
case 'year': {
|
|
341
348
|
const [minDate, maxDate] = value.split(' TO ');
|
|
342
349
|
// we have two potential ways of filtering by date:
|
package/src/utils/facet-utils.ts
CHANGED
|
@@ -62,7 +62,7 @@ export function updateSelectedFacetBucket(
|
|
|
62
62
|
omitNoneState = false,
|
|
63
63
|
): SelectedFacets {
|
|
64
64
|
const defaultedSelectedFacets = selectedFacets ?? getDefaultSelectedFacets();
|
|
65
|
-
const newFacets = {
|
|
65
|
+
const newFacets: SelectedFacets = {
|
|
66
66
|
...defaultedSelectedFacets,
|
|
67
67
|
[facetType]: {
|
|
68
68
|
...defaultedSelectedFacets[facetType],
|
|
@@ -71,7 +71,7 @@ export function updateSelectedFacetBucket(
|
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
if (omitNoneState && bucket.state === 'none') {
|
|
74
|
-
delete newFacets[facetType][bucket.key];
|
|
74
|
+
delete newFacets[facetType]?.[bucket.key];
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
return newFacets;
|
|
@@ -93,6 +93,7 @@ export function cloneSelectedFacets(
|
|
|
93
93
|
): SelectedFacets {
|
|
94
94
|
const cloneResult = getDefaultSelectedFacets();
|
|
95
95
|
forEachFacetBucket(selectedFacets, (facetType, bucketKey, bucket) => {
|
|
96
|
+
if (!cloneResult[facetType]) cloneResult[facetType] = {};
|
|
96
97
|
cloneResult[facetType][bucketKey] = bucket;
|
|
97
98
|
});
|
|
98
99
|
return cloneResult;
|
|
@@ -124,13 +125,14 @@ export function mergeSelectedFacets(
|
|
|
124
125
|
): SelectedFacets {
|
|
125
126
|
const mergeResult = cloneSelectedFacets(destination);
|
|
126
127
|
forEachFacetBucket(source, (facetType, bucketKey, bucket) => {
|
|
128
|
+
if (!mergeResult[facetType]) mergeResult[facetType] = {};
|
|
127
129
|
mergeResult[facetType][bucketKey] = bucket;
|
|
128
130
|
});
|
|
129
131
|
|
|
130
132
|
// Normalize any 'none' states on the result (from either source or destination)
|
|
131
133
|
forEachFacetBucket(mergeResult, (facetType, bucketKey, bucket) => {
|
|
132
134
|
if (bucket.state === 'none') {
|
|
133
|
-
delete mergeResult[facetType][bucketKey];
|
|
135
|
+
delete mergeResult[facetType]?.[bucketKey];
|
|
134
136
|
}
|
|
135
137
|
});
|
|
136
138
|
|
|
@@ -629,6 +629,39 @@ describe('Collection Facets', () => {
|
|
|
629
629
|
expect(facetRows?.[7]?.bucket?.key).to.equal('collection');
|
|
630
630
|
});
|
|
631
631
|
|
|
632
|
+
it('uses specified facet display order', async () => {
|
|
633
|
+
const el = await fixture<CollectionFacets>(
|
|
634
|
+
html`<collection-facets
|
|
635
|
+
.facetDisplayOrder=${['language', 'creator'] as FacetOption[]}
|
|
636
|
+
></collection-facets>`,
|
|
637
|
+
);
|
|
638
|
+
|
|
639
|
+
const aggs: Record<string, Aggregation> = {
|
|
640
|
+
mediatype: new Aggregation({
|
|
641
|
+
buckets: [{ key: 'texts', doc_count: 5 }],
|
|
642
|
+
}),
|
|
643
|
+
collection: new Aggregation({
|
|
644
|
+
buckets: [{ key: 'foo', doc_count: 10 }],
|
|
645
|
+
}),
|
|
646
|
+
creator: new Aggregation({
|
|
647
|
+
buckets: [{ key: 'bar', doc_count: 15 }],
|
|
648
|
+
}),
|
|
649
|
+
language: new Aggregation({
|
|
650
|
+
buckets: [{ key: 'baz', doc_count: 20 }],
|
|
651
|
+
}),
|
|
652
|
+
};
|
|
653
|
+
|
|
654
|
+
el.aggregations = aggs;
|
|
655
|
+
await el.updateComplete;
|
|
656
|
+
|
|
657
|
+
const facetHeaders = el.shadowRoot?.querySelectorAll('.facet-group-header');
|
|
658
|
+
|
|
659
|
+
// The only two facet groups should be Language and Creator (in that order)
|
|
660
|
+
expect(facetHeaders?.length).to.equal(2);
|
|
661
|
+
expect(facetHeaders?.[0].textContent).to.contain('Language');
|
|
662
|
+
expect(facetHeaders?.[1].textContent).to.contain('Creator');
|
|
663
|
+
});
|
|
664
|
+
|
|
632
665
|
describe('More Facets', () => {
|
|
633
666
|
it('Does not render < allowedFacetCount', async () => {
|
|
634
667
|
const el = await fixture<CollectionFacets>(
|
|
@@ -100,7 +100,7 @@ describe('Restoration state handler', () => {
|
|
|
100
100
|
window.history.replaceState({ path: url.href }, '', url.href);
|
|
101
101
|
|
|
102
102
|
const restorationState = handler.getRestorationState();
|
|
103
|
-
expect(restorationState.selectedFacets.year['2018'].state).to.equal(
|
|
103
|
+
expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(
|
|
104
104
|
'selected',
|
|
105
105
|
);
|
|
106
106
|
});
|
|
@@ -160,7 +160,7 @@ describe('Restoration state handler', () => {
|
|
|
160
160
|
window.history.replaceState({ path: url.href }, '', url.href);
|
|
161
161
|
|
|
162
162
|
const restorationState = handler.getRestorationState();
|
|
163
|
-
expect(restorationState.selectedFacets.subject
|
|
163
|
+
expect(restorationState.selectedFacets.subject?.foo.state).to.equal(
|
|
164
164
|
'selected',
|
|
165
165
|
);
|
|
166
166
|
});
|
|
@@ -173,7 +173,7 @@ describe('Restoration state handler', () => {
|
|
|
173
173
|
window.history.replaceState({ path: url.href }, '', url.href);
|
|
174
174
|
|
|
175
175
|
const restorationState = handler.getRestorationState();
|
|
176
|
-
expect(restorationState.selectedFacets.year['2018'].state).to.equal(
|
|
176
|
+
expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(
|
|
177
177
|
'hidden',
|
|
178
178
|
);
|
|
179
179
|
});
|
|
@@ -188,17 +188,17 @@ describe('Restoration state handler', () => {
|
|
|
188
188
|
|
|
189
189
|
const restorationState = handler.getRestorationState();
|
|
190
190
|
|
|
191
|
-
expect(restorationState.selectedFacets.collection
|
|
191
|
+
expect(restorationState.selectedFacets.collection?.foo.state).to.equal(
|
|
192
192
|
'selected',
|
|
193
193
|
);
|
|
194
|
-
expect(restorationState.selectedFacets.collection
|
|
194
|
+
expect(restorationState.selectedFacets.collection?.bar.state).to.equal(
|
|
195
195
|
'selected',
|
|
196
196
|
);
|
|
197
197
|
|
|
198
|
-
expect(restorationState.selectedFacets.collection
|
|
198
|
+
expect(restorationState.selectedFacets.collection?.baz.state).to.equal(
|
|
199
199
|
'hidden',
|
|
200
200
|
);
|
|
201
|
-
expect(restorationState.selectedFacets.collection
|
|
201
|
+
expect(restorationState.selectedFacets.collection?.boop.state).to.equal(
|
|
202
202
|
'hidden',
|
|
203
203
|
);
|
|
204
204
|
});
|
|
@@ -211,7 +211,7 @@ describe('Restoration state handler', () => {
|
|
|
211
211
|
window.history.replaceState({ path: url.href }, '', url.href);
|
|
212
212
|
|
|
213
213
|
const restorationState = handler.getRestorationState();
|
|
214
|
-
expect(restorationState.selectedFacets.collection
|
|
214
|
+
expect(restorationState.selectedFacets.collection?.foo.state).to.equal(
|
|
215
215
|
'hidden',
|
|
216
216
|
);
|
|
217
217
|
});
|
|
@@ -224,7 +224,7 @@ describe('Restoration state handler', () => {
|
|
|
224
224
|
window.history.replaceState({ path: url.href }, '', url.href);
|
|
225
225
|
|
|
226
226
|
const restorationState = handler.getRestorationState();
|
|
227
|
-
expect(restorationState.selectedFacets.subject
|
|
227
|
+
expect(restorationState.selectedFacets.subject?.foo.state).to.equal(
|
|
228
228
|
'selected',
|
|
229
229
|
);
|
|
230
230
|
});
|
|
@@ -237,7 +237,7 @@ describe('Restoration state handler', () => {
|
|
|
237
237
|
window.history.replaceState({ path: url.href }, '', url.href);
|
|
238
238
|
|
|
239
239
|
const restorationState = handler.getRestorationState();
|
|
240
|
-
expect(restorationState.selectedFacets.year['2018'].state).to.equal(
|
|
240
|
+
expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(
|
|
241
241
|
'hidden',
|
|
242
242
|
);
|
|
243
243
|
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mediatype-icon.test.js","sourceRoot":"","sources":["../../../test/tiles/mediatype-icon.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAG3B,OAAO,qCAAqC,CAAC;AAE7C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;;QACjC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;KAE/C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;;QACjD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;KAE/C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAmB,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;;QACpC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;;uBAG7B,CAAC,QAAQ,CAAC;;KAE5B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAmB,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;;QAC/C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;;uBAG7B,CAAC,QAAQ,EAAE,QAAQ,CAAC;;KAEtC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAmB,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;;QAClE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;;;uBAI7B,CAAC,QAAQ,EAAE,aAAa,CAAC;;KAE3C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAmB,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;;QAC3E,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;;uBAG7B,CAAC,QAAQ,EAAE,aAAa,CAAC;;KAE3C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAmB,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;;QACvC,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;;uBAG7B,CAAC,OAAO,CAAC;;KAE3B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAmB,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;;QAC5D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAoB,IAAI,CAAA;;KAE/C,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAA,EAAE,CAAC,UAAU,0CAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect, fixture } from '@open-wc/testing';\nimport { html } from 'lit';\nimport type { TileMediatypeIcon } from '../../src/tiles/tile-mediatype-icon';\n\nimport '../../src/tiles/tile-mediatype-icon';\n\ndescribe('Mediatype Icon', () => {\n it('renders component', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon mediatype=\"texts\"></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon');\n expect(iconDiv).to.exist;\n });\n\n it('renders basic mediatype correctly', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon mediatype=\"movies\"></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon') as HTMLDivElement;\n expect(iconDiv.title).to.equal('Movie');\n expect(iconDiv.getAttribute('style')).to.include('#f1644b');\n expect(iconDiv.children[0]).to.be.instanceOf(SVGElement);\n });\n\n it('renders TV mediatype', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon\n mediatype=\"movies\"\n .collections=${['tvnews']}\n ></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon') as HTMLDivElement;\n expect(iconDiv.title).to.equal('TV');\n });\n\n it('renders TV Commercial mediatype', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon\n mediatype=\"movies\"\n .collections=${['tvnews', 'tv_ads']}\n ></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon') as HTMLDivElement;\n expect(iconDiv.title).to.equal('TV Commercial');\n });\n\n it('renders TV Fact Check mediatype for search results', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon\n isTvSearchResult\n mediatype=\"movies\"\n .collections=${['tvnews', 'factchecked']}\n ></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon') as HTMLDivElement;\n expect(iconDiv.title).to.equal('TV Fact Check');\n });\n\n it('does not use TV Fact Check mediatype for non-search results', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon\n mediatype=\"movies\"\n .collections=${['tvnews', 'factchecked']}\n ></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon') as HTMLDivElement;\n expect(iconDiv.title).to.equal('TV');\n });\n\n it('renders radio mediatype', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon\n mediatype=\"audio\"\n .collections=${['radio']}\n ></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon') as HTMLDivElement;\n expect(iconDiv.title).to.equal('Radio');\n });\n\n it('renders no icon if mediatype is unrecognized', async () => {\n const el = await fixture<TileMediatypeIcon>(html`\n <tile-mediatype-icon mediatype=\"foobar\"></tile-mediatype-icon>\n `);\n\n const iconDiv = el.shadowRoot?.querySelector('#icon');\n expect(iconDiv).not.to.exist;\n });\n});\n"]}
|
|
File without changes
|
|
File without changes
|