@internetarchive/collection-browser 0.0.1-alpha.8 → 0.1.1
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 +16 -92
- package/dist/demo/app-root.d.ts +3 -5
- package/dist/demo/app-root.js +13 -83
- 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/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 +53 -31
- package/dist/src/collection-browser.js +504 -166
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets.d.ts +28 -13
- package/dist/src/collection-facets.js +276 -160
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/helpers.d.ts +1 -0
- package/dist/src/helpers.js +20 -0
- package/dist/src/helpers.js.map +1 -0
- 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-color.d.ts +3 -0
- package/dist/src/mediatype/mediatype-color.js +15 -0
- package/dist/src/mediatype/mediatype-color.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/mediatype/mediatype-display.d.ts +3 -0
- package/dist/src/mediatype/mediatype-display.js +86 -0
- package/dist/src/mediatype/mediatype-display.js.map +1 -0
- package/dist/src/mediatype/mediatype-icon.d.ts +10 -0
- package/dist/src/mediatype/mediatype-icon.js +105 -0
- package/dist/src/mediatype/mediatype-icon.js.map +1 -0
- package/dist/src/mediatype/mediatype-text.d.ts +3 -0
- package/dist/src/mediatype/mediatype-text.js +17 -0
- package/dist/src/mediatype/mediatype-text.js.map +1 -0
- package/dist/src/mediatype/mediatypeConfig.d.ts +3 -0
- package/dist/src/mediatype/mediatypeConfig.js +86 -0
- package/dist/src/mediatype/mediatypeConfig.js.map +1 -0
- package/dist/src/mediatype-icon.d.ts +2 -2
- package/dist/src/mediatype-icon.js +35 -46
- package/dist/src/mediatype-icon.js.map +1 -1
- 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 -1
- package/dist/src/sort-filter-bar/alpha-bar.js +9 -2
- 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.js +1 -1
- package/dist/src/sort-filter-bar/img/list.js.map +1 -1
- 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 +71 -14
- package/dist/src/sort-filter-bar/sort-filter-bar.js +499 -216
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/collection-browser-loading-tile.d.ts +5 -0
- 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 +21 -0
- package/dist/src/tiles/item-image.js +215 -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/tiles/loading-tile.js +1 -42
- package/dist/src/tiles/loading-tile.js.map +1 -1
- package/dist/src/tiles/mediatype-icon.d.ts +9 -0
- 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/src/waveform-thumbnail.d.ts +7 -0
- package/dist/src/waveform-thumbnail.js +106 -0
- package/dist/src/waveform-thumbnail.js.map +1 -0
- package/dist/{demo/icon-provider-icon.d.ts → src/waveform-view.d.ts} +0 -0
- package/dist/src/waveform-view.js +2 -0
- package/dist/src/waveform-view.js.map +1 -0
- package/dist/src/your-webcomponent.d.ts +8 -0
- package/dist/src/your-webcomponent.js +38 -0
- package/dist/src/your-webcomponent.js.map +1 -0
- 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/mediatype-config.test.d.ts +1 -0
- package/dist/test/mediatype-config.test.js +17 -0
- package/dist/test/mediatype-config.test.js.map +1 -0
- package/dist/{src/assets/img/icons/eye-hidden.d.ts → test/mediatype-icon.test.d.ts} +0 -0
- package/dist/test/mediatype-icon.test.js +3 -0
- package/dist/test/mediatype-icon.test.js.map +1 -0
- package/dist/test/mediatypeConfig.test.d.ts +1 -0
- package/dist/test/mediatypeConfig.test.js +17 -0
- package/dist/test/mediatypeConfig.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/dist/test/your-webcomponent.test.d.ts +1 -0
- package/dist/test/your-webcomponent.test.js +23 -0
- package/dist/test/your-webcomponent.test.js.map +1 -0
- 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/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 +529 -163
- package/src/collection-facets.ts +307 -205
- 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 +9 -3
- package/src/sort-filter-bar/img/compact.ts +5 -0
- package/src/sort-filter-bar/img/list.ts +1 -1
- package/src/sort-filter-bar/img/tile.ts +5 -0
- package/src/sort-filter-bar/sort-filter-bar.ts +557 -225
- 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 +218 -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/demo/icon-provider/icon-provider-icon.d.ts +0 -10
- package/dist/demo/icon-provider/icon-provider-icon.js +0 -32
- package/dist/demo/icon-provider/icon-provider-icon.js.map +0 -1
- package/dist/demo/icon-provider/icon-provider.d.ts +0 -10
- package/dist/demo/icon-provider/icon-provider.js +0 -9
- package/dist/demo/icon-provider/icon-provider.js.map +0 -1
- package/dist/demo/icon-provider-icon.js +0 -2
- package/dist/demo/icon-provider-icon.js.map +0 -1
- package/dist/demo/icon-provider.d.ts +0 -10
- package/dist/demo/icon-provider.js +0 -12
- package/dist/demo/icon-provider.js.map +0 -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/eye-hidden.js +0 -2
- package/dist/src/assets/img/icons/eye-hidden.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/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/search-handler.d.ts +0 -11
- package/dist/src/search-handler.js +0 -34
- package/dist/src/search-handler.js.map +0 -1
- package/src/mediatype-icon.ts +0 -83
- package/src/sort-filter-bar/img/grid.ts +0 -5
- package/src/tiles/loading-tile.ts +0 -70
|
@@ -1,11 +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';
|
|
7
9
|
import eyeIcon from './assets/img/icons/eye';
|
|
8
10
|
import eyeClosedIcon from './assets/img/icons/eye-closed';
|
|
11
|
+
import chevronIcon from './assets/img/icons/chevron';
|
|
12
|
+
import { defaultSelectedFacets, } from './models';
|
|
9
13
|
const facetDisplayOrder = [
|
|
10
14
|
'mediatype',
|
|
11
15
|
'year',
|
|
@@ -33,51 +37,57 @@ const facetTitles = {
|
|
|
33
37
|
let CollectionFacets = class CollectionFacets extends LitElement {
|
|
34
38
|
constructor() {
|
|
35
39
|
super(...arguments);
|
|
36
|
-
this.selectedFacets = {};
|
|
37
|
-
this.hiddenFacets = {};
|
|
38
40
|
this.facetsLoading = false;
|
|
39
41
|
this.fullYearAggregationLoading = false;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
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
|
+
};
|
|
51
52
|
}
|
|
52
53
|
render() {
|
|
53
54
|
return html `
|
|
54
55
|
<div id="container" class="${this.facetsLoading ? 'loading' : ''}">
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
${this.histogramTemplate}
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
${this.mergedFacets.map(facetGroup => html `
|
|
56
|
+
${this.showHistogramDatePicker && this.fullYearsHistogramAggregation
|
|
57
|
+
? html `
|
|
61
58
|
<div class="facet-group">
|
|
62
|
-
<h1
|
|
63
|
-
${this.
|
|
59
|
+
<h1>Year Published <feature-feedback></feature-feedback></h1>
|
|
60
|
+
${this.histogramTemplate}
|
|
64
61
|
</div>
|
|
65
|
-
`
|
|
62
|
+
`
|
|
63
|
+
: nothing}
|
|
64
|
+
${this.mergedFacets.map(facetGroup => this.getFacetGroupTemplate(facetGroup))}
|
|
66
65
|
</div>
|
|
67
66
|
`;
|
|
68
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
|
+
}
|
|
69
79
|
get currentYearsHistogramAggregation() {
|
|
70
80
|
var _a;
|
|
71
81
|
return (_a = this.aggregations) === null || _a === void 0 ? void 0 : _a.year_histogram;
|
|
72
82
|
}
|
|
73
83
|
get histogramTemplate() {
|
|
74
|
-
const {
|
|
84
|
+
const { fullYearsHistogramAggregation } = this;
|
|
75
85
|
return html `
|
|
76
86
|
<histogram-date-range
|
|
77
87
|
.minDate=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.first_bucket_key}
|
|
78
88
|
.maxDate=${fullYearsHistogramAggregation === null || fullYearsHistogramAggregation === void 0 ? void 0 : fullYearsHistogramAggregation.last_bucket_key}
|
|
79
|
-
.minSelectedDate=${
|
|
80
|
-
.maxSelectedDate=${
|
|
89
|
+
.minSelectedDate=${this.minSelectedDate}
|
|
90
|
+
.maxSelectedDate=${this.maxSelectedDate}
|
|
81
91
|
.updateDelay=${100}
|
|
82
92
|
missingDataMessage="..."
|
|
83
93
|
.width=${180}
|
|
@@ -94,49 +104,34 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
94
104
|
this.dispatchEvent(event);
|
|
95
105
|
}
|
|
96
106
|
/**
|
|
97
|
-
* Combines the selected
|
|
107
|
+
* Combines the selected facets with the aggregations to create a single list of facets
|
|
98
108
|
*/
|
|
99
109
|
get mergedFacets() {
|
|
100
110
|
const facetGroups = [];
|
|
101
111
|
facetDisplayOrder.forEach(facetKey => {
|
|
102
|
-
var _a
|
|
112
|
+
var _a;
|
|
103
113
|
const selectedFacetGroup = this.selectedFacetGroups.find(group => group.key === facetKey);
|
|
104
|
-
const hiddenFacetGroup = this.hiddenFacetGroups.find(group => group.key === facetKey);
|
|
105
114
|
const aggregateFacetGroup = this.aggregationFacetGroups.find(group => group.key === facetKey);
|
|
106
115
|
// if the user selected a facet, but it's not in the aggregation, we add it as-is
|
|
107
116
|
if (selectedFacetGroup && !aggregateFacetGroup) {
|
|
108
117
|
facetGroups.push(selectedFacetGroup);
|
|
109
118
|
return;
|
|
110
119
|
}
|
|
111
|
-
if (hiddenFacetGroup && !aggregateFacetGroup) {
|
|
112
|
-
facetGroups.push(hiddenFacetGroup);
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
120
|
// if we don't have an aggregate facet group, don't add this to the list
|
|
116
121
|
if (!aggregateFacetGroup)
|
|
117
122
|
return;
|
|
118
123
|
// start with either the selected group if we have one, or the aggregate group
|
|
119
|
-
const facetGroup =
|
|
124
|
+
const facetGroup = selectedFacetGroup !== null && selectedFacetGroup !== void 0 ? selectedFacetGroup : aggregateFacetGroup;
|
|
120
125
|
// attach the counts to the selected buckets
|
|
121
|
-
const bucketsWithCount = (
|
|
126
|
+
const bucketsWithCount = (_a = selectedFacetGroup === null || selectedFacetGroup === void 0 ? void 0 : selectedFacetGroup.buckets.map(bucket => {
|
|
122
127
|
const selectedBucket = aggregateFacetGroup.buckets.find(b => b.key === bucket.key);
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
return selectedBucket
|
|
129
|
+
? {
|
|
125
130
|
...bucket,
|
|
126
131
|
count: selectedBucket.count,
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
})) !== null && _b !== void 0 ? _b : hiddenFacetGroup === null || hiddenFacetGroup === void 0 ? void 0 : hiddenFacetGroup.buckets.map(bucket => {
|
|
131
|
-
const selectedBucket = aggregateFacetGroup.buckets.find(b => b.key === bucket.key);
|
|
132
|
-
if (selectedBucket) {
|
|
133
|
-
return {
|
|
134
|
-
...bucket,
|
|
135
|
-
count: selectedBucket.count,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
return bucket;
|
|
139
|
-
})) !== null && _c !== void 0 ? _c : [];
|
|
132
|
+
}
|
|
133
|
+
: bucket;
|
|
134
|
+
})) !== null && _a !== void 0 ? _a : [];
|
|
140
135
|
// append any additional buckets that were not selected
|
|
141
136
|
aggregateFacetGroup.buckets.forEach(bucket => {
|
|
142
137
|
const existingBucket = bucketsWithCount.find(b => b.key === bucket.key);
|
|
@@ -145,35 +140,41 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
145
140
|
bucketsWithCount.push(bucket);
|
|
146
141
|
});
|
|
147
142
|
facetGroup.buckets = bucketsWithCount.splice(0, 5);
|
|
148
|
-
// if (facetGroup.buckets.length === 0) return;
|
|
149
143
|
facetGroups.push(facetGroup);
|
|
150
144
|
});
|
|
151
145
|
return facetGroups;
|
|
152
146
|
}
|
|
153
147
|
/**
|
|
154
|
-
* Converts the
|
|
148
|
+
* Converts the selected facets to a `FacetGroup` array,
|
|
149
|
+
* which is easier to work with
|
|
155
150
|
*/
|
|
156
151
|
get selectedFacetGroups() {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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,
|
|
171
169
|
count: 0,
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
170
|
+
state: facetState,
|
|
171
|
+
};
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
title,
|
|
175
|
+
key: option,
|
|
176
|
+
buckets,
|
|
175
177
|
};
|
|
176
|
-
facetGroups.push(group);
|
|
177
178
|
});
|
|
178
179
|
return facetGroups;
|
|
179
180
|
}
|
|
@@ -184,17 +185,30 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
184
185
|
var _a;
|
|
185
186
|
const facetGroups = [];
|
|
186
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
|
|
187
189
|
if (key === 'year_histogram')
|
|
188
190
|
return;
|
|
189
191
|
const option = this.getFacetOptionFromKey(key);
|
|
190
192
|
const title = facetTitles[option];
|
|
191
193
|
const castedBuckets = buckets.buckets;
|
|
192
|
-
const facetBuckets = castedBuckets.map(bucket =>
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
+
});
|
|
198
212
|
const group = {
|
|
199
213
|
title,
|
|
200
214
|
key: option,
|
|
@@ -204,124 +218,161 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
204
218
|
});
|
|
205
219
|
return facetGroups;
|
|
206
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
|
+
*/
|
|
207
258
|
getFacetTemplate(facetGroup) {
|
|
259
|
+
const bucketsNoFavorites = facetGroup.buckets.filter(bucket => bucket.key.startsWith('fav-') === false);
|
|
260
|
+
const bucketsMaxSix = bucketsNoFavorites.slice(0, 6);
|
|
208
261
|
return html `
|
|
209
262
|
<ul class="facet-list">
|
|
210
|
-
${repeat(
|
|
211
|
-
|
|
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;
|
|
212
288
|
return html `
|
|
213
289
|
<li>
|
|
214
|
-
<
|
|
290
|
+
<div class="facet-row">
|
|
215
291
|
<div class="facet-checkbox">
|
|
216
292
|
<input
|
|
217
293
|
type="checkbox"
|
|
218
294
|
.name=${facetGroup.key}
|
|
219
295
|
.value=${bucket.key}
|
|
220
|
-
@click=${
|
|
221
|
-
|
|
296
|
+
@click=${(e) => {
|
|
297
|
+
this.facetClicked(e, bucket, false);
|
|
298
|
+
}}
|
|
299
|
+
.checked=${facetSelected}
|
|
222
300
|
class="select-facet-checkbox"
|
|
301
|
+
title=${onlyShowText}
|
|
302
|
+
id=${showOnlyCheckboxId}
|
|
223
303
|
/>
|
|
224
304
|
<input
|
|
225
305
|
type="checkbox"
|
|
226
|
-
id=${
|
|
306
|
+
id=${negativeCheckboxId}
|
|
227
307
|
.name=${facetGroup.key}
|
|
228
308
|
.value=${bucket.key}
|
|
229
|
-
@click=${
|
|
230
|
-
|
|
309
|
+
@click=${(e) => {
|
|
310
|
+
this.facetClicked(e, bucket, true);
|
|
311
|
+
}}
|
|
312
|
+
.checked=${facetHidden}
|
|
231
313
|
class="hide-facet-checkbox"
|
|
232
314
|
/>
|
|
233
|
-
<label
|
|
234
|
-
|
|
315
|
+
<label
|
|
316
|
+
for=${negativeCheckboxId}
|
|
317
|
+
class="hide-facet-icon"
|
|
318
|
+
title=${showHideText}
|
|
319
|
+
>
|
|
320
|
+
${facetHidden ? eyeClosedIcon : eyeIcon}
|
|
235
321
|
</label>
|
|
236
322
|
</div>
|
|
237
|
-
|
|
238
|
-
<
|
|
239
|
-
|
|
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>
|
|
332
|
+
</div>
|
|
240
333
|
</li>
|
|
241
334
|
`;
|
|
242
335
|
})}
|
|
243
336
|
</ul>
|
|
244
337
|
`;
|
|
245
338
|
}
|
|
246
|
-
|
|
247
|
-
const { selectedFacets } = this;
|
|
248
|
-
const facetClone = { ...selectedFacets };
|
|
249
|
-
const currentFacetValues = facetClone[name];
|
|
250
|
-
if (currentFacetValues) {
|
|
251
|
-
currentFacetValues.push(value);
|
|
252
|
-
facetClone[name] = currentFacetValues;
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
facetClone[name] = [value];
|
|
256
|
-
}
|
|
257
|
-
this.selectedFacets = facetClone;
|
|
258
|
-
}
|
|
259
|
-
facetUnchecked(name, value) {
|
|
260
|
-
const { selectedFacets } = this;
|
|
261
|
-
const facetClone = { ...selectedFacets };
|
|
262
|
-
let currentFacetValues = selectedFacets[name];
|
|
263
|
-
if (currentFacetValues) {
|
|
264
|
-
currentFacetValues = currentFacetValues.filter(el => el !== value);
|
|
265
|
-
facetClone[name] = currentFacetValues;
|
|
266
|
-
if (currentFacetValues.length === 0) {
|
|
267
|
-
delete facetClone[name];
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
this.selectedFacets = facetClone;
|
|
271
|
-
}
|
|
272
|
-
facetToggled(e) {
|
|
339
|
+
facetClicked(e, bucket, negative) {
|
|
273
340
|
const target = e.target;
|
|
274
341
|
const { checked, name, value } = target;
|
|
275
342
|
if (checked) {
|
|
276
|
-
this.facetChecked(name, value);
|
|
343
|
+
this.facetChecked(name, value, negative);
|
|
277
344
|
}
|
|
278
345
|
else {
|
|
279
346
|
this.facetUnchecked(name, value);
|
|
280
347
|
}
|
|
281
|
-
const event = new CustomEvent('facetsChanged', {
|
|
282
|
-
detail: this.selectedFacets,
|
|
283
|
-
});
|
|
284
|
-
this.dispatchEvent(event);
|
|
285
348
|
}
|
|
286
|
-
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
if (
|
|
290
|
-
|
|
349
|
+
facetChecked(key, value, negative) {
|
|
350
|
+
const { selectedFacets } = this;
|
|
351
|
+
let newFacets;
|
|
352
|
+
if (selectedFacets) {
|
|
353
|
+
newFacets = {
|
|
354
|
+
...selectedFacets,
|
|
355
|
+
};
|
|
291
356
|
}
|
|
292
357
|
else {
|
|
293
|
-
|
|
358
|
+
newFacets = defaultSelectedFacets;
|
|
294
359
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
});
|
|
298
|
-
this.dispatchEvent(event);
|
|
360
|
+
newFacets[key][value] = negative ? 'hidden' : 'selected';
|
|
361
|
+
this.selectedFacets = newFacets;
|
|
299
362
|
}
|
|
300
|
-
|
|
301
|
-
const {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
363
|
+
facetUnchecked(key, value) {
|
|
364
|
+
const { selectedFacets } = this;
|
|
365
|
+
let newFacets;
|
|
366
|
+
if (selectedFacets) {
|
|
367
|
+
newFacets = {
|
|
368
|
+
...selectedFacets,
|
|
369
|
+
};
|
|
307
370
|
}
|
|
308
371
|
else {
|
|
309
|
-
|
|
372
|
+
newFacets = defaultSelectedFacets;
|
|
310
373
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
facetUnhidden(name, value) {
|
|
314
|
-
const { hiddenFacets } = this;
|
|
315
|
-
const facetClone = { ...hiddenFacets };
|
|
316
|
-
let currentFacetValues = hiddenFacets[name];
|
|
317
|
-
if (currentFacetValues) {
|
|
318
|
-
currentFacetValues = currentFacetValues.filter(el => el !== value);
|
|
319
|
-
facetClone[name] = currentFacetValues;
|
|
320
|
-
if (currentFacetValues.length === 0) {
|
|
321
|
-
delete facetClone[name];
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
this.hiddenFacets = facetClone;
|
|
374
|
+
delete newFacets[key][value];
|
|
375
|
+
this.selectedFacets = newFacets;
|
|
325
376
|
}
|
|
326
377
|
/**
|
|
327
378
|
* Parse the aggregate key title into the human readable title
|
|
@@ -347,12 +398,52 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
347
398
|
opacity: 0.5;
|
|
348
399
|
}
|
|
349
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
|
+
|
|
350
441
|
h1 {
|
|
351
442
|
font-size: 1.4rem;
|
|
352
443
|
font-weight: 200;
|
|
353
444
|
border-bottom: 1px solid rgb(232, 232, 232);
|
|
354
445
|
padding-bottom: 3px;
|
|
355
|
-
margin:
|
|
446
|
+
margin: 0;
|
|
356
447
|
}
|
|
357
448
|
|
|
358
449
|
ul.facet-list {
|
|
@@ -373,11 +464,17 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
373
464
|
|
|
374
465
|
.facet-row {
|
|
375
466
|
display: flex;
|
|
376
|
-
align-items:
|
|
467
|
+
align-items: start;
|
|
377
468
|
font-weight: 500;
|
|
378
469
|
font-size: 1.2rem;
|
|
379
470
|
}
|
|
380
471
|
|
|
472
|
+
.facet-info-display {
|
|
473
|
+
display: flex;
|
|
474
|
+
flex: 1;
|
|
475
|
+
cursor: pointer;
|
|
476
|
+
}
|
|
477
|
+
|
|
381
478
|
.facet-title {
|
|
382
479
|
flex: 1;
|
|
383
480
|
}
|
|
@@ -387,6 +484,7 @@ let CollectionFacets = class CollectionFacets extends LitElement {
|
|
|
387
484
|
}
|
|
388
485
|
|
|
389
486
|
.select-facet-checkbox {
|
|
487
|
+
cursor: pointer;
|
|
390
488
|
margin-right: 5px;
|
|
391
489
|
}
|
|
392
490
|
|
|
@@ -409,17 +507,35 @@ __decorate([
|
|
|
409
507
|
property({ type: Object })
|
|
410
508
|
], CollectionFacets.prototype, "fullYearsHistogramAggregation", void 0);
|
|
411
509
|
__decorate([
|
|
412
|
-
property({ type:
|
|
413
|
-
], CollectionFacets.prototype, "
|
|
510
|
+
property({ type: String })
|
|
511
|
+
], CollectionFacets.prototype, "minSelectedDate", void 0);
|
|
414
512
|
__decorate([
|
|
415
|
-
property({ type:
|
|
416
|
-
], CollectionFacets.prototype, "
|
|
513
|
+
property({ type: String })
|
|
514
|
+
], CollectionFacets.prototype, "maxSelectedDate", void 0);
|
|
417
515
|
__decorate([
|
|
418
516
|
property({ type: Boolean })
|
|
419
517
|
], CollectionFacets.prototype, "facetsLoading", void 0);
|
|
420
518
|
__decorate([
|
|
421
519
|
property({ type: Boolean })
|
|
422
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);
|
|
423
539
|
CollectionFacets = __decorate([
|
|
424
540
|
customElement('collection-facets')
|
|
425
541
|
], CollectionFacets);
|