@internetarchive/collection-browser 0.0.1-alpha.7 → 0.1.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/README.md +8 -11
- package/demo/app-root.ts +30 -96
- package/dist/demo/app-root.d.ts +3 -5
- package/dist/demo/app-root.js +28 -87
- package/dist/demo/app-root.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/src/assets/img/icons/chevron.d.ts +2 -0
- package/dist/src/assets/img/icons/chevron.js +4 -0
- package/dist/src/assets/img/icons/chevron.js.map +1 -0
- package/dist/src/assets/img/icons/eye-closed.d.ts +2 -0
- package/dist/src/assets/img/icons/eye-closed.js +5 -0
- package/dist/src/assets/img/icons/eye-closed.js.map +1 -0
- package/dist/src/assets/img/icons/eye.d.ts +2 -0
- package/dist/src/assets/img/icons/eye.js +5 -0
- package/dist/src/assets/img/icons/eye.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/account.d.ts +1 -2
- package/dist/src/assets/img/icons/mediatype/account.js +6 -4
- package/dist/src/assets/img/icons/mediatype/account.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/audio.js +7 -4
- package/dist/src/assets/img/icons/mediatype/audio.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/collection.js +7 -4
- package/dist/src/assets/img/icons/mediatype/collection.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/data.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/data.js +15 -0
- package/dist/src/assets/img/icons/mediatype/data.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/etree.js +10 -5
- package/dist/src/assets/img/icons/mediatype/etree.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/film.js +2 -1
- package/dist/src/assets/img/icons/mediatype/film.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/images.js +9 -6
- package/dist/src/assets/img/icons/mediatype/images.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/radio.d.ts +1 -0
- package/dist/src/assets/img/icons/mediatype/radio.js +15 -0
- package/dist/src/assets/img/icons/mediatype/radio.js.map +1 -0
- package/dist/src/assets/img/icons/mediatype/software.js +9 -6
- package/dist/src/assets/img/icons/mediatype/software.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/texts.js +9 -6
- package/dist/src/assets/img/icons/mediatype/texts.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/tv.js +10 -5
- package/dist/src/assets/img/icons/mediatype/tv.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/video.js +10 -6
- package/dist/src/assets/img/icons/mediatype/video.js.map +1 -1
- package/dist/src/assets/img/icons/mediatype/web.js +9 -6
- package/dist/src/assets/img/icons/mediatype/web.js.map +1 -1
- package/dist/src/collection-browser.d.ts +57 -20
- package/dist/src/collection-browser.js +511 -128
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets.d.ts +27 -6
- package/dist/src/collection-facets.js +316 -100
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/language-code-handler/language-code-handler.d.ts +37 -0
- package/dist/src/language-code-handler/language-code-handler.js +27 -0
- package/dist/src/language-code-handler/language-code-handler.js.map +1 -0
- package/dist/src/language-code-handler/language-code-mapping.d.ts +1 -0
- package/dist/src/language-code-handler/language-code-mapping.js +563 -0
- package/dist/src/language-code-handler/language-code-mapping.js.map +1 -0
- package/dist/src/mediatype/mediatype-config.d.ts +3 -0
- package/dist/src/mediatype/mediatype-config.js +86 -0
- package/dist/src/mediatype/mediatype-config.js.map +1 -0
- package/dist/src/models.d.ts +72 -13
- package/dist/src/models.js +57 -1
- package/dist/src/models.js.map +1 -1
- package/dist/src/restoration-state-handler.d.ts +38 -0
- package/dist/src/restoration-state-handler.js +204 -0
- package/dist/src/restoration-state-handler.js.map +1 -0
- package/dist/src/sort-filter-bar/alpha-bar.d.ts +1 -2
- package/dist/src/sort-filter-bar/alpha-bar.js +12 -8
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/img/compact.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/compact.js +5 -0
- package/dist/src/sort-filter-bar/img/compact.js.map +1 -0
- package/dist/src/sort-filter-bar/img/list.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/list.js +5 -0
- package/dist/src/sort-filter-bar/img/list.js.map +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js +5 -0
- package/dist/src/sort-filter-bar/img/sort-triangle.js.map +1 -0
- package/dist/src/sort-filter-bar/img/tile.d.ts +1 -0
- package/dist/src/sort-filter-bar/img/tile.js +5 -0
- package/dist/src/sort-filter-bar/img/tile.js.map +1 -0
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +74 -13
- package/dist/src/sort-filter-bar/sort-filter-bar.js +547 -172
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/{loading-tile.d.ts → collection-browser-loading-tile.d.ts} +1 -1
- package/dist/src/tiles/collection-browser-loading-tile.js +32 -0
- package/dist/src/tiles/collection-browser-loading-tile.js.map +1 -0
- package/dist/src/tiles/grid/account-tile.d.ts +1 -1
- package/dist/src/tiles/grid/account-tile.js +5 -5
- package/dist/src/tiles/grid/account-tile.js.map +1 -1
- package/dist/src/tiles/grid/collection-tile.js +1 -2
- package/dist/src/tiles/grid/collection-tile.js.map +1 -1
- package/dist/src/tiles/grid/icons/views.d.ts +1 -1
- package/dist/src/tiles/grid/icons/views.js +2 -2
- package/dist/src/tiles/grid/icons/views.js.map +1 -1
- package/dist/src/tiles/grid/item-tile.d.ts +2 -2
- package/dist/src/tiles/grid/item-tile.js +58 -150
- package/dist/src/tiles/grid/item-tile.js.map +1 -1
- package/dist/src/tiles/item-image.d.ts +19 -0
- package/dist/src/tiles/item-image.js +204 -0
- package/dist/src/tiles/item-image.js.map +1 -0
- package/dist/src/tiles/list/account-label.d.ts +1 -0
- package/dist/src/tiles/list/account-label.js +7 -0
- package/dist/src/tiles/list/account-label.js.map +1 -0
- package/dist/src/tiles/list/date-label.d.ts +1 -0
- package/dist/src/tiles/list/date-label.js +13 -0
- package/dist/src/tiles/list/date-label.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +12 -0
- package/dist/src/tiles/list/tile-list-compact-header.js +84 -0
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact.d.ts +12 -0
- package/dist/src/tiles/list/tile-list-compact.js +203 -6
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +35 -10
- package/dist/src/tiles/list/tile-list.js +368 -104
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/{mediatype-icon.d.ts → tiles/mediatype-icon.d.ts} +2 -2
- package/dist/src/tiles/mediatype-icon.js +78 -0
- package/dist/src/tiles/mediatype-icon.js.map +1 -0
- package/dist/src/tiles/tile-dispatcher.d.ts +11 -4
- package/dist/src/tiles/tile-dispatcher.js +56 -19
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/dist/src/utils/format-date.js +2 -2
- package/dist/src/utils/format-date.js.map +1 -1
- package/dist/test/collection-browser.test.d.ts +1 -0
- package/dist/test/collection-browser.test.js +16 -2
- package/dist/test/collection-browser.test.js.map +1 -1
- package/dist/test/{utils/format-string.test.d.ts → mediatype-config.test.d.ts} +0 -0
- package/dist/test/mediatype-config.test.js +17 -0
- package/dist/test/mediatype-config.test.js.map +1 -0
- package/dist/test/utils/format-date.test.js +1 -1
- package/dist/test/utils/format-date.test.js.map +1 -1
- package/index.ts +6 -0
- package/local.archive.org.cert +86 -0
- package/local.archive.org.key +27 -0
- package/package.json +9 -5
- package/src/assets/img/icons/chevron.ts +4 -0
- package/src/assets/img/icons/eye-closed.ts +5 -0
- package/src/assets/img/icons/eye.ts +5 -0
- package/src/assets/img/icons/mediatype/account.ts +6 -4
- package/src/assets/img/icons/mediatype/audio.ts +7 -4
- package/src/assets/img/icons/mediatype/collection.ts +7 -4
- package/src/assets/img/icons/mediatype/data.ts +15 -0
- package/src/assets/img/icons/mediatype/etree.ts +10 -5
- package/src/assets/img/icons/mediatype/film.ts +2 -1
- package/src/assets/img/icons/mediatype/images.ts +9 -6
- package/src/assets/img/icons/mediatype/radio.ts +15 -0
- package/src/assets/img/icons/mediatype/software.ts +9 -6
- package/src/assets/img/icons/mediatype/texts.ts +9 -6
- package/src/assets/img/icons/mediatype/tv.ts +10 -5
- package/src/assets/img/icons/mediatype/video.ts +10 -6
- package/src/assets/img/icons/mediatype/web.ts +9 -6
- package/src/collection-browser.ts +537 -123
- package/src/collection-facets.ts +352 -132
- package/src/language-code-handler/language-code-handler.ts +64 -0
- package/src/language-code-handler/language-code-mapping.ts +564 -0
- package/src/mediatype/mediatype-config.ts +86 -0
- package/src/models.ts +141 -13
- package/src/restoration-state-handler.ts +266 -0
- package/src/sort-filter-bar/alpha-bar.ts +12 -8
- package/src/sort-filter-bar/img/compact.ts +5 -0
- package/src/sort-filter-bar/img/list.ts +5 -0
- package/src/sort-filter-bar/img/sort-triangle.ts +5 -0
- package/src/sort-filter-bar/img/tile.ts +5 -0
- package/src/sort-filter-bar/sort-filter-bar.ts +604 -176
- package/src/tiles/collection-browser-loading-tile.ts +29 -0
- package/src/tiles/grid/account-tile.ts +1 -1
- package/src/tiles/grid/collection-tile.ts +1 -2
- package/src/tiles/grid/icons/views.ts +2 -2
- package/src/tiles/grid/item-tile.ts +57 -162
- package/src/tiles/item-image.ts +206 -0
- package/src/tiles/list/account-label.ts +6 -0
- package/src/tiles/list/date-label.ts +12 -0
- package/src/tiles/list/tile-list-compact-header.ts +77 -0
- package/src/tiles/list/tile-list-compact.ts +218 -0
- package/src/tiles/list/tile-list.ts +412 -107
- package/src/tiles/mediatype-icon.ts +75 -0
- package/src/tiles/tile-dispatcher.ts +66 -18
- package/src/utils/format-date.ts +2 -2
- package/test/collection-browser.test.ts +20 -1
- package/test/mediatype-config.test.ts +18 -0
- package/test/utils/format-date.test.ts +1 -1
- package/web-dev-server.config.mjs +3 -1
- package/dist/src/assets/img/icons/audio.d.ts +0 -1
- package/dist/src/assets/img/icons/audio.js +0 -9
- package/dist/src/assets/img/icons/audio.js.map +0 -1
- package/dist/src/assets/img/icons/collection.d.ts +0 -1
- package/dist/src/assets/img/icons/collection.js +0 -9
- package/dist/src/assets/img/icons/collection.js.map +0 -1
- package/dist/src/assets/img/icons/etree.d.ts +0 -1
- package/dist/src/assets/img/icons/etree.js +0 -9
- package/dist/src/assets/img/icons/etree.js.map +0 -1
- package/dist/src/assets/img/icons/images.d.ts +0 -1
- package/dist/src/assets/img/icons/images.js +0 -10
- package/dist/src/assets/img/icons/images.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/etree copy.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/etree copy.js +0 -9
- package/dist/src/assets/img/icons/mediatype/etree copy.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/livemusic.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/livemusic.js +0 -7
- package/dist/src/assets/img/icons/mediatype/livemusic.js.map +0 -1
- package/dist/src/assets/img/icons/mediatype/photos.d.ts +0 -1
- package/dist/src/assets/img/icons/mediatype/photos.js +0 -7
- package/dist/src/assets/img/icons/mediatype/photos.js.map +0 -1
- package/dist/src/assets/img/icons/software.d.ts +0 -1
- package/dist/src/assets/img/icons/software.js +0 -10
- package/dist/src/assets/img/icons/software.js.map +0 -1
- package/dist/src/assets/img/icons/texts.d.ts +0 -1
- package/dist/src/assets/img/icons/texts.js +0 -10
- package/dist/src/assets/img/icons/texts.js.map +0 -1
- package/dist/src/assets/img/icons/tv.d.ts +0 -1
- package/dist/src/assets/img/icons/tv.js +0 -9
- package/dist/src/assets/img/icons/tv.js.map +0 -1
- package/dist/src/assets/img/icons/video.d.ts +0 -1
- package/dist/src/assets/img/icons/video.js +0 -10
- package/dist/src/assets/img/icons/video.js.map +0 -1
- package/dist/src/assets/img/icons/web.d.ts +0 -1
- package/dist/src/assets/img/icons/web.js +0 -10
- package/dist/src/assets/img/icons/web.js.map +0 -1
- package/dist/src/mediatype-icon.js +0 -89
- package/dist/src/mediatype-icon.js.map +0 -1
- package/dist/src/search-handler.d.ts +0 -11
- package/dist/src/search-handler.js +0 -34
- package/dist/src/search-handler.js.map +0 -1
- package/dist/src/tiles/list/tile-list-detail.d.ts +0 -7
- package/dist/src/tiles/list/tile-list-detail.js +0 -28
- package/dist/src/tiles/list/tile-list-detail.js.map +0 -1
- package/dist/src/tiles/loading-tile.js +0 -73
- package/dist/src/tiles/loading-tile.js.map +0 -1
- package/dist/src/utils/format-string.d.ts +0 -2
- package/dist/src/utils/format-string.js +0 -7
- package/dist/src/utils/format-string.js.map +0 -1
- package/dist/test/utils/format-string.test.js +0 -17
- package/dist/test/utils/format-string.test.js.map +0 -1
- package/src/assets/img/icons/mediatype/foo.svg +0 -5
- package/src/mediatype-icon.ts +0 -83
- package/src/tiles/loading-tile.ts +0 -70
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
|
|
3
|
-
import {
|
|
2
|
+
/* eslint-disable import/no-duplicates */
|
|
3
|
+
import { css, html, LitElement, nothing, } from 'lit';
|
|
4
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
4
5
|
import { repeat } from 'lit/directives/repeat.js';
|
|
5
6
|
import '@internetarchive/histogram-date-range';
|
|
6
7
|
import '@internetarchive/feature-feedback';
|
|
8
|
+
import '@internetarchive/collection-name-cache';
|
|
9
|
+
import eyeIcon from './assets/img/icons/eye';
|
|
10
|
+
import eyeClosedIcon from './assets/img/icons/eye-closed';
|
|
11
|
+
import chevronIcon from './assets/img/icons/chevron';
|
|
12
|
+
import { defaultSelectedFacets, } from './models';
|
|
7
13
|
const facetDisplayOrder = [
|
|
8
14
|
'mediatype',
|
|
9
15
|
'year',
|
|
@@ -31,50 +37,57 @@ const facetTitles = {
|
|
|
31
37
|
let CollectionFacets = class CollectionFacets extends LitElement {
|
|
32
38
|
constructor() {
|
|
33
39
|
super(...arguments);
|
|
34
|
-
this.selectedFacets = {};
|
|
35
40
|
this.facetsLoading = false;
|
|
36
41
|
this.fullYearAggregationLoading = false;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
return hydratedSelectedFacets;
|
|
42
|
+
this.collapsableFacets = false;
|
|
43
|
+
this.showHistogramDatePicker = false;
|
|
44
|
+
this.openFacets = {
|
|
45
|
+
subject: false,
|
|
46
|
+
mediatype: false,
|
|
47
|
+
language: false,
|
|
48
|
+
creator: false,
|
|
49
|
+
collection: false,
|
|
50
|
+
year: false,
|
|
51
|
+
};
|
|
48
52
|
}
|
|
49
53
|
render() {
|
|
50
54
|
return html `
|
|
51
55
|
<div id="container" class="${this.facetsLoading ? 'loading' : ''}">
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
${this.histogramTemplate}
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
${this.mergedFacets.map(facetGroup => html `
|
|
56
|
+
${this.showHistogramDatePicker && this.fullYearsHistogramAggregation
|
|
57
|
+
? html `
|
|
58
58
|
<div class="facet-group">
|
|
59
|
-
<h1
|
|
60
|
-
${this.
|
|
59
|
+
<h1>Year Published <feature-feedback></feature-feedback></h1>
|
|
60
|
+
${this.histogramTemplate}
|
|
61
61
|
</div>
|
|
62
|
-
`
|
|
62
|
+
`
|
|
63
|
+
: nothing}
|
|
64
|
+
${this.mergedFacets.map(facetGroup => this.getFacetGroupTemplate(facetGroup))}
|
|
63
65
|
</div>
|
|
64
66
|
`;
|
|
65
67
|
}
|
|
68
|
+
updated(changed) {
|
|
69
|
+
if (changed.has('selectedFacets')) {
|
|
70
|
+
this.dispatchFacetsChangedEvent();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
dispatchFacetsChangedEvent() {
|
|
74
|
+
const event = new CustomEvent('facetsChanged', {
|
|
75
|
+
detail: this.selectedFacets,
|
|
76
|
+
});
|
|
77
|
+
this.dispatchEvent(event);
|
|
78
|
+
}
|
|
66
79
|
get currentYearsHistogramAggregation() {
|
|
67
80
|
var _a;
|
|
68
81
|
return (_a = this.aggregations) === null || _a === void 0 ? void 0 : _a.year_histogram;
|
|
69
82
|
}
|
|
70
83
|
get histogramTemplate() {
|
|
71
|
-
const {
|
|
84
|
+
const { fullYearsHistogramAggregation } = this;
|
|
72
85
|
return html `
|
|
73
86
|
<histogram-date-range
|
|
74
87
|
.minDate=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.first_bucket_key}
|
|
75
88
|
.maxDate=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.last_bucket_key}
|
|
76
|
-
.minSelectedDate=${
|
|
77
|
-
.maxSelectedDate=${
|
|
89
|
+
.minSelectedDate=${this.minSelectedDate}
|
|
90
|
+
.maxSelectedDate=${this.maxSelectedDate}
|
|
78
91
|
.updateDelay=${100}
|
|
79
92
|
missingDataMessage="..."
|
|
80
93
|
.width=${180}
|
|
@@ -112,13 +125,12 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
112
125
|
// attach the counts to the selected buckets
|
|
113
126
|
const bucketsWithCount = (_a = selectedFacetGroup === null || selectedFacetGroup === void 0 ? void 0 : selectedFacetGroup.buckets.map(bucket => {
|
|
114
127
|
const selectedBucket = aggregateFacetGroup.buckets.find(b => b.key === bucket.key);
|
|
115
|
-
|
|
116
|
-
|
|
128
|
+
return selectedBucket
|
|
129
|
+
? {
|
|
117
130
|
...bucket,
|
|
118
131
|
count: selectedBucket.count,
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return bucket;
|
|
132
|
+
}
|
|
133
|
+
: bucket;
|
|
122
134
|
})) !== null && _a !== void 0 ? _a : [];
|
|
123
135
|
// append any additional buckets that were not selected
|
|
124
136
|
aggregateFacetGroup.buckets.forEach(bucket => {
|
|
@@ -128,31 +140,43 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
128
140
|
bucketsWithCount.push(bucket);
|
|
129
141
|
});
|
|
130
142
|
facetGroup.buckets = bucketsWithCount.splice(0, 5);
|
|
131
|
-
if (facetGroup.buckets.length === 0)
|
|
132
|
-
return;
|
|
133
143
|
facetGroups.push(facetGroup);
|
|
134
144
|
});
|
|
135
145
|
return facetGroups;
|
|
136
146
|
}
|
|
137
147
|
/**
|
|
138
|
-
* Converts the
|
|
148
|
+
* Converts the selected facets to a `FacetGroup` array,
|
|
149
|
+
* which is easier to work with
|
|
139
150
|
*/
|
|
140
151
|
get selectedFacetGroups() {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
152
|
+
if (!this.selectedFacets)
|
|
153
|
+
return [];
|
|
154
|
+
const facetGroups = Object.entries(this.selectedFacets).map(([key, selectedFacets]) => {
|
|
155
|
+
const option = key;
|
|
156
|
+
const title = facetTitles[option];
|
|
157
|
+
const buckets = Object.entries(selectedFacets).map(([value, facetState]) => {
|
|
158
|
+
var _a, _b;
|
|
159
|
+
let displayText = value;
|
|
160
|
+
// for selected languages, we store the language code instead of the
|
|
161
|
+
// display name, so look up the name from the mapping
|
|
162
|
+
if (option === 'language') {
|
|
163
|
+
displayText =
|
|
164
|
+
(_b = (_a = this.languageCodeHandler) === null || _a === void 0 ? void 0 : _a.getLanguageNameFromCodeString(value)) !== null && _b !== void 0 ? _b : value;
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
displayText,
|
|
168
|
+
key: value,
|
|
149
169
|
count: 0,
|
|
150
|
-
|
|
151
|
-
}
|
|
170
|
+
state: facetState,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
title,
|
|
175
|
+
key: option,
|
|
176
|
+
buckets,
|
|
152
177
|
};
|
|
153
|
-
selectedFacetGroups.push(group);
|
|
154
178
|
});
|
|
155
|
-
return
|
|
179
|
+
return facetGroups;
|
|
156
180
|
}
|
|
157
181
|
/**
|
|
158
182
|
* Converts the raw `aggregations` to `FacetGroups`, which are easier to use
|
|
@@ -161,15 +185,30 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
161
185
|
var _a;
|
|
162
186
|
const facetGroups = [];
|
|
163
187
|
Object.entries((_a = this.aggregations) !== null && _a !== void 0 ? _a : []).forEach(([key, buckets]) => {
|
|
188
|
+
// the year_histogram data is in a different format so can't be handled here
|
|
164
189
|
if (key === 'year_histogram')
|
|
165
190
|
return;
|
|
166
191
|
const option = this.getFacetOptionFromKey(key);
|
|
167
192
|
const title = facetTitles[option];
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
193
|
+
const castedBuckets = buckets.buckets;
|
|
194
|
+
const facetBuckets = castedBuckets.map(bucket => {
|
|
195
|
+
var _a, _b;
|
|
196
|
+
let bucketKey = bucket.key;
|
|
197
|
+
// for languages, we need to search by language code instead of the
|
|
198
|
+
// display name, which is what we get from the search engine result
|
|
199
|
+
if (option === 'language') {
|
|
200
|
+
// const languageCodeKey = languageToCodeMap[bucket.key];
|
|
201
|
+
bucketKey =
|
|
202
|
+
(_b = (_a = this.languageCodeHandler) === null || _a === void 0 ? void 0 : _a.getCodeStringFromLanguageName(`${bucket.key}`)) !== null && _b !== void 0 ? _b : bucket.key;
|
|
203
|
+
// bucketKey = languageCodeKey ?? bucket.key;
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
displayText: `${bucket.key}`,
|
|
207
|
+
key: `${bucketKey}`,
|
|
208
|
+
count: bucket.doc_count,
|
|
209
|
+
state: 'none',
|
|
210
|
+
};
|
|
211
|
+
});
|
|
173
212
|
const group = {
|
|
174
213
|
title,
|
|
175
214
|
key: option,
|
|
@@ -179,68 +218,161 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
179
218
|
});
|
|
180
219
|
return facetGroups;
|
|
181
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* Generate the template for a facet group with a header and the collapsible
|
|
223
|
+
* chevron for the mobile view
|
|
224
|
+
*/
|
|
225
|
+
getFacetGroupTemplate(facetGroup) {
|
|
226
|
+
if (facetGroup.buckets.length === 0)
|
|
227
|
+
return nothing;
|
|
228
|
+
const { key } = facetGroup;
|
|
229
|
+
const isOpen = this.openFacets[key];
|
|
230
|
+
const collapser = html `
|
|
231
|
+
<span class="collapser ${isOpen ? 'open' : ''}"> ${chevronIcon} </span>
|
|
232
|
+
`;
|
|
233
|
+
return html `
|
|
234
|
+
<div class="facet-group ${this.collapsableFacets ? 'mobile' : ''}">
|
|
235
|
+
<h1
|
|
236
|
+
@click=${() => {
|
|
237
|
+
const newOpenFacets = { ...this.openFacets };
|
|
238
|
+
newOpenFacets[key] = !isOpen;
|
|
239
|
+
this.openFacets = newOpenFacets;
|
|
240
|
+
}}
|
|
241
|
+
@keyup=${() => {
|
|
242
|
+
const newOpenFacets = { ...this.openFacets };
|
|
243
|
+
newOpenFacets[key] = !isOpen;
|
|
244
|
+
this.openFacets = newOpenFacets;
|
|
245
|
+
}}
|
|
246
|
+
>
|
|
247
|
+
${this.collapsableFacets ? collapser : nothing} ${facetGroup.title}
|
|
248
|
+
</h1>
|
|
249
|
+
<div class="facet-group-content ${isOpen ? 'open' : ''}">
|
|
250
|
+
${this.getFacetTemplate(facetGroup)}
|
|
251
|
+
</div>
|
|
252
|
+
</div>
|
|
253
|
+
`;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Generate the list template for each bucket in a facet group
|
|
257
|
+
*/
|
|
182
258
|
getFacetTemplate(facetGroup) {
|
|
259
|
+
const bucketsNoFavorites = facetGroup.buckets.filter(bucket => bucket.key.startsWith('fav-') === false);
|
|
260
|
+
const bucketsMaxSix = bucketsNoFavorites.slice(0, 6);
|
|
183
261
|
return html `
|
|
184
262
|
<ul class="facet-list">
|
|
185
|
-
${repeat(
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
263
|
+
${repeat(bucketsMaxSix, bucket => `${facetGroup.key}:${bucket.key}`, bucket => {
|
|
264
|
+
var _a, _b;
|
|
265
|
+
const showOnlyCheckboxId = `${facetGroup.key}:${bucket.key}-show-only`;
|
|
266
|
+
const negativeCheckboxId = `${facetGroup.key}:${bucket.key}-negative`;
|
|
267
|
+
// for collections, we need to asynchronously load the collection name
|
|
268
|
+
// so we use the `async-collection-name` widget and for the rest, we have
|
|
269
|
+
// a static value to use
|
|
270
|
+
const bucketTextDisplay = facetGroup.key !== 'collection'
|
|
271
|
+
? html `${(_a = bucket.displayText) !== null && _a !== void 0 ? _a : bucket.key}`
|
|
272
|
+
: html `
|
|
273
|
+
<async-collection-name
|
|
274
|
+
.collectionNameCache=${this.collectionNameCache}
|
|
275
|
+
.identifier=${bucket.key}
|
|
276
|
+
placeholder="-"
|
|
277
|
+
></async-collection-name>
|
|
278
|
+
`;
|
|
279
|
+
const facetHidden = bucket.state === 'hidden';
|
|
280
|
+
const facetSelected = bucket.state === 'selected';
|
|
281
|
+
const titleText = `${facetGroup.key}: ${(_b = bucket.displayText) !== null && _b !== void 0 ? _b : bucket.key}`;
|
|
282
|
+
const onlyShowText = facetSelected
|
|
283
|
+
? `Show all ${facetGroup.key}s`
|
|
284
|
+
: `Only show ${titleText}`;
|
|
285
|
+
const hideText = `Hide ${titleText}`;
|
|
286
|
+
const unhideText = `Unhide ${titleText}`;
|
|
287
|
+
const showHideText = facetHidden ? unhideText : hideText;
|
|
288
|
+
return html `
|
|
289
|
+
<li>
|
|
290
|
+
<div class="facet-row">
|
|
291
|
+
<div class="facet-checkbox">
|
|
292
|
+
<input
|
|
293
|
+
type="checkbox"
|
|
294
|
+
.name=${facetGroup.key}
|
|
295
|
+
.value=${bucket.key}
|
|
296
|
+
@click=${(e) => {
|
|
297
|
+
this.facetClicked(e, bucket, false);
|
|
298
|
+
}}
|
|
299
|
+
.checked=${facetSelected}
|
|
300
|
+
class="select-facet-checkbox"
|
|
301
|
+
title=${onlyShowText}
|
|
302
|
+
id=${showOnlyCheckboxId}
|
|
303
|
+
/>
|
|
304
|
+
<input
|
|
305
|
+
type="checkbox"
|
|
306
|
+
id=${negativeCheckboxId}
|
|
307
|
+
.name=${facetGroup.key}
|
|
308
|
+
.value=${bucket.key}
|
|
309
|
+
@click=${(e) => {
|
|
310
|
+
this.facetClicked(e, bucket, true);
|
|
311
|
+
}}
|
|
312
|
+
.checked=${facetHidden}
|
|
313
|
+
class="hide-facet-checkbox"
|
|
314
|
+
/>
|
|
315
|
+
<label
|
|
316
|
+
for=${negativeCheckboxId}
|
|
317
|
+
class="hide-facet-icon"
|
|
318
|
+
title=${showHideText}
|
|
319
|
+
>
|
|
320
|
+
${facetHidden ? eyeClosedIcon : eyeIcon}
|
|
321
|
+
</label>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
<label
|
|
325
|
+
for=${showOnlyCheckboxId}
|
|
326
|
+
class="facet-info-display"
|
|
327
|
+
title=${onlyShowText}
|
|
328
|
+
>
|
|
329
|
+
<div class="facet-title">${bucketTextDisplay}</div>
|
|
330
|
+
<div class="facet-count">${bucket.count}</div>
|
|
331
|
+
</label>
|
|
196
332
|
</div>
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
</li>
|
|
201
|
-
`)}
|
|
333
|
+
</li>
|
|
334
|
+
`;
|
|
335
|
+
})}
|
|
202
336
|
</ul>
|
|
203
337
|
`;
|
|
204
338
|
}
|
|
205
|
-
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
currentFacetValues.push(value);
|
|
211
|
-
facetClone[name] = currentFacetValues;
|
|
339
|
+
facetClicked(e, bucket, negative) {
|
|
340
|
+
const target = e.target;
|
|
341
|
+
const { checked, name, value } = target;
|
|
342
|
+
if (checked) {
|
|
343
|
+
this.facetChecked(name, value, negative);
|
|
212
344
|
}
|
|
213
345
|
else {
|
|
214
|
-
|
|
346
|
+
this.facetUnchecked(name, value);
|
|
215
347
|
}
|
|
216
|
-
this.selectedFacets = facetClone;
|
|
217
348
|
}
|
|
218
|
-
|
|
349
|
+
facetChecked(key, value, negative) {
|
|
219
350
|
const { selectedFacets } = this;
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (currentFacetValues.length === 0) {
|
|
226
|
-
delete facetClone[name];
|
|
227
|
-
}
|
|
351
|
+
let newFacets;
|
|
352
|
+
if (selectedFacets) {
|
|
353
|
+
newFacets = {
|
|
354
|
+
...selectedFacets,
|
|
355
|
+
};
|
|
228
356
|
}
|
|
229
|
-
|
|
357
|
+
else {
|
|
358
|
+
newFacets = defaultSelectedFacets;
|
|
359
|
+
}
|
|
360
|
+
newFacets[key][value] = negative ? 'hidden' : 'selected';
|
|
361
|
+
this.selectedFacets = newFacets;
|
|
230
362
|
}
|
|
231
|
-
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
if (
|
|
235
|
-
|
|
363
|
+
facetUnchecked(key, value) {
|
|
364
|
+
const { selectedFacets } = this;
|
|
365
|
+
let newFacets;
|
|
366
|
+
if (selectedFacets) {
|
|
367
|
+
newFacets = {
|
|
368
|
+
...selectedFacets,
|
|
369
|
+
};
|
|
236
370
|
}
|
|
237
371
|
else {
|
|
238
|
-
|
|
372
|
+
newFacets = defaultSelectedFacets;
|
|
239
373
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
});
|
|
243
|
-
this.dispatchEvent(event);
|
|
374
|
+
delete newFacets[key][value];
|
|
375
|
+
this.selectedFacets = newFacets;
|
|
244
376
|
}
|
|
245
377
|
/**
|
|
246
378
|
* Parse the aggregate key title into the human readable title
|
|
@@ -266,12 +398,52 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
266
398
|
opacity: 0.5;
|
|
267
399
|
}
|
|
268
400
|
|
|
401
|
+
.collapser {
|
|
402
|
+
display: inline-block;
|
|
403
|
+
cursor: pointer;
|
|
404
|
+
width: 10px;
|
|
405
|
+
height: 10px;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.collapser svg {
|
|
409
|
+
transition: transform 0.2s ease-in-out;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.collapser.open svg {
|
|
413
|
+
transform: rotate(90deg);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.facet-group {
|
|
417
|
+
margin-bottom: 2rem;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.facet-group h1 {
|
|
421
|
+
margin-bottom: 0.7rem;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.facet-group.mobile h1 {
|
|
425
|
+
cursor: pointer;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.facet-group-content {
|
|
429
|
+
transition: max-height 0.2s ease-in-out;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.facet-group.mobile .facet-group-content {
|
|
433
|
+
max-height: 0;
|
|
434
|
+
overflow: hidden;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.facet-group.mobile .facet-group-content.open {
|
|
438
|
+
max-height: 2000px;
|
|
439
|
+
}
|
|
440
|
+
|
|
269
441
|
h1 {
|
|
270
442
|
font-size: 1.4rem;
|
|
271
443
|
font-weight: 200;
|
|
272
444
|
border-bottom: 1px solid rgb(232, 232, 232);
|
|
273
445
|
padding-bottom: 3px;
|
|
274
|
-
margin:
|
|
446
|
+
margin: 0;
|
|
275
447
|
}
|
|
276
448
|
|
|
277
449
|
ul.facet-list {
|
|
@@ -286,15 +458,23 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
286
458
|
|
|
287
459
|
.facet-checkbox {
|
|
288
460
|
margin-right: 0.5rem;
|
|
461
|
+
display: flex;
|
|
462
|
+
align-items: center;
|
|
289
463
|
}
|
|
290
464
|
|
|
291
465
|
.facet-row {
|
|
292
466
|
display: flex;
|
|
293
|
-
align-items:
|
|
467
|
+
align-items: start;
|
|
294
468
|
font-weight: 500;
|
|
295
469
|
font-size: 1.2rem;
|
|
296
470
|
}
|
|
297
471
|
|
|
472
|
+
.facet-info-display {
|
|
473
|
+
display: flex;
|
|
474
|
+
flex: 1;
|
|
475
|
+
cursor: pointer;
|
|
476
|
+
}
|
|
477
|
+
|
|
298
478
|
.facet-title {
|
|
299
479
|
flex: 1;
|
|
300
480
|
}
|
|
@@ -302,6 +482,21 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
302
482
|
.facet-count {
|
|
303
483
|
margin-left: 0.5rem;
|
|
304
484
|
}
|
|
485
|
+
|
|
486
|
+
.select-facet-checkbox {
|
|
487
|
+
cursor: pointer;
|
|
488
|
+
margin-right: 5px;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.hide-facet-checkbox {
|
|
492
|
+
display: none;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.hide-facet-icon {
|
|
496
|
+
width: 15px;
|
|
497
|
+
height: 15px;
|
|
498
|
+
cursor: pointer;
|
|
499
|
+
}
|
|
305
500
|
`;
|
|
306
501
|
}
|
|
307
502
|
};
|
|
@@ -312,14 +507,35 @@ __decorate([
|
|
|
312
507
|
property({ type: Object })
|
|
313
508
|
], CollectionFacets.prototype, "fullYearsHistogramAggregation", void 0);
|
|
314
509
|
__decorate([
|
|
315
|
-
property({ type:
|
|
316
|
-
], CollectionFacets.prototype, "
|
|
510
|
+
property({ type: String })
|
|
511
|
+
], CollectionFacets.prototype, "minSelectedDate", void 0);
|
|
512
|
+
__decorate([
|
|
513
|
+
property({ type: String })
|
|
514
|
+
], CollectionFacets.prototype, "maxSelectedDate", void 0);
|
|
317
515
|
__decorate([
|
|
318
516
|
property({ type: Boolean })
|
|
319
517
|
], CollectionFacets.prototype, "facetsLoading", void 0);
|
|
320
518
|
__decorate([
|
|
321
519
|
property({ type: Boolean })
|
|
322
520
|
], CollectionFacets.prototype, "fullYearAggregationLoading", void 0);
|
|
521
|
+
__decorate([
|
|
522
|
+
property({ type: Object })
|
|
523
|
+
], CollectionFacets.prototype, "selectedFacets", void 0);
|
|
524
|
+
__decorate([
|
|
525
|
+
property({ type: Boolean })
|
|
526
|
+
], CollectionFacets.prototype, "collapsableFacets", void 0);
|
|
527
|
+
__decorate([
|
|
528
|
+
property({ type: Boolean })
|
|
529
|
+
], CollectionFacets.prototype, "showHistogramDatePicker", void 0);
|
|
530
|
+
__decorate([
|
|
531
|
+
property({ type: Object })
|
|
532
|
+
], CollectionFacets.prototype, "languageCodeHandler", void 0);
|
|
533
|
+
__decorate([
|
|
534
|
+
property({ type: Object })
|
|
535
|
+
], CollectionFacets.prototype, "collectionNameCache", void 0);
|
|
536
|
+
__decorate([
|
|
537
|
+
state()
|
|
538
|
+
], CollectionFacets.prototype, "openFacets", void 0);
|
|
323
539
|
CollectionFacets = __decorate([
|
|
324
540
|
customElement('collection-facets')
|
|
325
541
|
], CollectionFacets);
|