@internetarchive/collection-browser 0.0.1-alpha.13 → 0.0.1-alpha.16
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/demo/app-root.ts +0 -4
- package/dist/demo/app-root.js +0 -4
- package/dist/demo/app-root.js.map +1 -1
- package/dist/src/assets/img/icons/arrow-right.d.ts +2 -0
- package/dist/src/assets/img/icons/arrow-right.js +4 -0
- package/dist/src/assets/img/icons/arrow-right.js.map +1 -0
- 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/collection-browser.d.ts +13 -3
- package/dist/src/collection-browser.js +178 -32
- package/dist/src/collection-browser.js.map +1 -1
- package/dist/src/collection-facets.d.ts +4 -1
- package/dist/src/collection-facets.js +88 -9
- package/dist/src/collection-facets.js.map +1 -1
- package/dist/src/mediatype-icon.js +2 -2
- package/dist/src/mediatype-icon.js.map +1 -1
- package/dist/src/models.d.ts +14 -2
- package/dist/src/models.js +31 -7
- package/dist/src/models.js.map +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.js +1 -1
- package/dist/src/sort-filter-bar/alpha-bar.js.map +1 -1
- package/dist/src/sort-filter-bar/sort-filter-bar.d.ts +38 -4
- package/dist/src/sort-filter-bar/sort-filter-bar.js +297 -200
- package/dist/src/sort-filter-bar/sort-filter-bar.js.map +1 -1
- package/dist/src/tiles/list/tile-list-compact-header.d.ts +11 -0
- package/dist/src/tiles/list/tile-list-compact-header.js +77 -0
- package/dist/src/tiles/list/tile-list-compact-header.js.map +1 -0
- package/dist/src/tiles/list/tile-list-compact.d.ts +1 -1
- package/dist/src/tiles/list/tile-list-compact.js +12 -12
- package/dist/src/tiles/list/tile-list-compact.js.map +1 -1
- package/dist/src/tiles/list/tile-list.d.ts +10 -10
- package/dist/src/tiles/list/tile-list.js +41 -36
- package/dist/src/tiles/list/tile-list.js.map +1 -1
- package/dist/src/tiles/tile-dispatcher.d.ts +3 -0
- package/dist/src/tiles/tile-dispatcher.js +31 -12
- package/dist/src/tiles/tile-dispatcher.js.map +1 -1
- package/package.json +1 -1
- package/src/assets/img/icons/chevron.ts +4 -0
- package/src/collection-browser.ts +187 -38
- package/src/collection-facets.ts +87 -11
- package/src/mediatype-icon.ts +2 -2
- package/src/models.ts +35 -17
- package/src/sort-filter-bar/alpha-bar.ts +1 -1
- package/src/sort-filter-bar/sort-filter-bar.ts +339 -208
- package/src/tiles/list/tile-list-compact-header.ts +73 -0
- package/src/tiles/list/tile-list-compact.ts +12 -12
- package/src/tiles/list/tile-list.ts +41 -39
- package/src/tiles/tile-dispatcher.ts +33 -12
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { LitElement, html, css, nothing } from 'lit';
|
|
3
|
-
import { customElement, property, state } from 'lit/decorators.js';
|
|
2
|
+
import { LitElement, html, css, nothing, } from 'lit';
|
|
3
|
+
import { customElement, property, query, state } from 'lit/decorators.js';
|
|
4
|
+
import { SortField, SortFieldDisplayName, } from '../models';
|
|
4
5
|
import './alpha-bar';
|
|
5
6
|
import { sortIcon } from './img/sort-triangle';
|
|
6
7
|
import { gridIcon } from './img/grid';
|
|
7
8
|
import { listIcon } from './img/list';
|
|
8
|
-
var SortFieldName;
|
|
9
|
-
(function (SortFieldName) {
|
|
10
|
-
SortFieldName["datearchived"] = "Date Archived";
|
|
11
|
-
SortFieldName["datepublished"] = "Date Published";
|
|
12
|
-
SortFieldName["datereviewed"] = "Date Reviewed";
|
|
13
|
-
SortFieldName["dateadded"] = "Date Added";
|
|
14
|
-
})(SortFieldName || (SortFieldName = {}));
|
|
15
9
|
let SortFilterBar = class SortFilterBar extends LitElement {
|
|
16
10
|
constructor() {
|
|
17
11
|
super(...arguments);
|
|
18
12
|
this.sortDirection = null;
|
|
19
|
-
this.selectedSort =
|
|
13
|
+
this.selectedSort = SortField.relevance;
|
|
20
14
|
this.selectedTitleFilter = null;
|
|
21
15
|
this.selectedCreatorFilter = null;
|
|
22
16
|
this.showRelevance = true;
|
|
23
17
|
this.titleSelectorVisible = false;
|
|
24
18
|
this.creatorSelectorVisible = false;
|
|
25
19
|
this.dateSortSelectorVisible = false;
|
|
20
|
+
this.desktopSelectorBarWidth = 0;
|
|
21
|
+
this.selectorBarContainerWidth = 0;
|
|
26
22
|
}
|
|
27
23
|
render() {
|
|
28
24
|
return html `
|
|
@@ -35,143 +31,16 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
35
31
|
: nothing}
|
|
36
32
|
|
|
37
33
|
<div id="sort-bar">
|
|
38
|
-
<div id="sort-
|
|
39
|
-
|
|
40
|
-
<li>
|
|
41
|
-
<div id="sort-direction-container">
|
|
42
|
-
<button
|
|
43
|
-
id="sort-ascending-btn"
|
|
44
|
-
class="sort-button ${this.sortDirection === 'asc'
|
|
45
|
-
? 'selected'
|
|
46
|
-
: ''}"
|
|
47
|
-
@click=${() => {
|
|
48
|
-
this.sortDirection = 'asc';
|
|
49
|
-
}}
|
|
50
|
-
>
|
|
51
|
-
${sortIcon}
|
|
52
|
-
</button>
|
|
53
|
-
<button
|
|
54
|
-
id="sort-descending-btn"
|
|
55
|
-
class="sort-button ${this.sortDirection === 'desc'
|
|
56
|
-
? 'selected'
|
|
57
|
-
: ''}"
|
|
58
|
-
@click=${() => {
|
|
59
|
-
this.sortDirection = 'desc';
|
|
60
|
-
}}
|
|
61
|
-
>
|
|
62
|
-
${sortIcon}
|
|
63
|
-
</button>
|
|
64
|
-
</div>
|
|
65
|
-
</li>
|
|
66
|
-
<li id="sort-by-text">Sort By</li>
|
|
67
|
-
${this.showRelevance
|
|
68
|
-
? html `
|
|
69
|
-
<li>
|
|
70
|
-
<a
|
|
71
|
-
href="#"
|
|
72
|
-
@click=${(e) => {
|
|
73
|
-
e.preventDefault();
|
|
74
|
-
this.selectedSort = 'relevance';
|
|
75
|
-
}}
|
|
76
|
-
class=${this.selectedSort === 'relevance'
|
|
77
|
-
? 'selected'
|
|
78
|
-
: ''}
|
|
79
|
-
>
|
|
80
|
-
Relevance
|
|
81
|
-
</a>
|
|
82
|
-
</li>
|
|
83
|
-
`
|
|
84
|
-
: nothing}
|
|
85
|
-
<li>
|
|
86
|
-
<a
|
|
87
|
-
href="#"
|
|
88
|
-
@click=${(e) => {
|
|
89
|
-
e.preventDefault();
|
|
90
|
-
this.selectedSort = 'views';
|
|
91
|
-
}}
|
|
92
|
-
class=${this.selectedSort === 'views' ? 'selected' : ''}
|
|
93
|
-
>
|
|
94
|
-
Views
|
|
95
|
-
</a>
|
|
96
|
-
</li>
|
|
97
|
-
<li>
|
|
98
|
-
<a
|
|
99
|
-
href="#"
|
|
100
|
-
@click=${(e) => {
|
|
101
|
-
e.preventDefault();
|
|
102
|
-
this.titleSelectorVisible = !this.titleSelectorVisible;
|
|
103
|
-
this.selectedSort = 'title';
|
|
104
|
-
}}
|
|
105
|
-
class=${this.selectedSort === 'title' ? 'selected' : ''}
|
|
106
|
-
>
|
|
107
|
-
Title
|
|
108
|
-
</a>
|
|
109
|
-
</li>
|
|
110
|
-
<li>
|
|
111
|
-
<a
|
|
112
|
-
href="#"
|
|
113
|
-
@click=${(e) => {
|
|
114
|
-
e.preventDefault();
|
|
115
|
-
this.dateSortSelectorVisible =
|
|
116
|
-
!this.dateSortSelectorVisible;
|
|
117
|
-
this.selectedSort = 'datearchived';
|
|
118
|
-
}}
|
|
119
|
-
class=${this.dateOptionSelected ? 'selected' : ''}
|
|
120
|
-
>
|
|
121
|
-
${this.dateSortField}
|
|
122
|
-
</a>
|
|
123
|
-
</li>
|
|
124
|
-
<li>
|
|
125
|
-
<a
|
|
126
|
-
href="#"
|
|
127
|
-
@click=${(e) => {
|
|
128
|
-
e.preventDefault();
|
|
129
|
-
this.creatorSelectorVisible = !this.creatorSelectorVisible;
|
|
130
|
-
this.selectedSort = 'creator';
|
|
131
|
-
}}
|
|
132
|
-
class=${this.selectedSort === 'creator' ? 'selected' : ''}
|
|
133
|
-
>
|
|
134
|
-
Creator
|
|
135
|
-
</a>
|
|
136
|
-
</li>
|
|
137
|
-
</ul>
|
|
34
|
+
<div id="sort-direction-container">
|
|
35
|
+
${this.sortDirectionSelectorTemplate}
|
|
138
36
|
</div>
|
|
139
37
|
|
|
140
|
-
<div id="
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
? html `<li>
|
|
144
|
-
<label id="show-details">
|
|
145
|
-
<input
|
|
146
|
-
type="checkbox"
|
|
147
|
-
@click=${this.detailSelected}
|
|
148
|
-
?checked=${this.displayMode === 'list-detail'}
|
|
149
|
-
/>
|
|
150
|
-
Show Details
|
|
151
|
-
</label>
|
|
152
|
-
</li>`
|
|
153
|
-
: nothing}
|
|
154
|
-
|
|
155
|
-
<li>
|
|
156
|
-
<button
|
|
157
|
-
id="grid-button"
|
|
158
|
-
@click=${this.gridSelected}
|
|
159
|
-
class=${this.displayMode === 'grid' ? 'active' : ''}
|
|
160
|
-
>
|
|
161
|
-
${gridIcon}
|
|
162
|
-
</button>
|
|
163
|
-
</li>
|
|
164
|
-
<li>
|
|
165
|
-
<button
|
|
166
|
-
id="list-button"
|
|
167
|
-
@click=${this.listSelected}
|
|
168
|
-
class=${this.displayMode !== 'grid' ? 'active' : ''}
|
|
169
|
-
>
|
|
170
|
-
${listIcon}
|
|
171
|
-
</button>
|
|
172
|
-
</li>
|
|
173
|
-
</ul>
|
|
38
|
+
<div id="sort-selector-container">
|
|
39
|
+
${this.mobileSortSelectorTemplate}
|
|
40
|
+
${this.desktopSortSelectorTemplate}
|
|
174
41
|
</div>
|
|
42
|
+
|
|
43
|
+
<div id="display-style-selector">${this.displayOptionTemplate}</div>
|
|
175
44
|
</div>
|
|
176
45
|
|
|
177
46
|
${this.dateSortSelectorVisible ? this.dateSortSelector : nothing}
|
|
@@ -184,10 +53,6 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
184
53
|
if (changed.has('displayMode')) {
|
|
185
54
|
this.displayModeChanged();
|
|
186
55
|
}
|
|
187
|
-
if ((changed.has('sortDirection') || changed.has('selectedSort')) &&
|
|
188
|
-
this.sortDirection !== null) {
|
|
189
|
-
this.sortChanged();
|
|
190
|
-
}
|
|
191
56
|
if (changed.has('selectedSort') && this.sortDirection === null) {
|
|
192
57
|
this.sortDirection = 'desc';
|
|
193
58
|
}
|
|
@@ -197,55 +62,231 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
197
62
|
if (changed.has('selectedCreatorFilter') && this.selectedCreatorFilter) {
|
|
198
63
|
this.creatorSelectorVisible = true;
|
|
199
64
|
}
|
|
65
|
+
if (changed.has('resizeObserver')) {
|
|
66
|
+
const oldObserver = changed.get('resizeObserver');
|
|
67
|
+
if (oldObserver)
|
|
68
|
+
this.disconnectResizeObserver(oldObserver);
|
|
69
|
+
this.setupResizeObserver();
|
|
70
|
+
}
|
|
200
71
|
}
|
|
201
|
-
|
|
72
|
+
disconnectedCallback() {
|
|
73
|
+
if (this.resizeObserver) {
|
|
74
|
+
this.disconnectResizeObserver(this.resizeObserver);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
disconnectResizeObserver(resizeObserver) {
|
|
78
|
+
resizeObserver.removeObserver({
|
|
79
|
+
target: this.sortSelectorContainer,
|
|
80
|
+
handler: this,
|
|
81
|
+
});
|
|
82
|
+
resizeObserver.removeObserver({
|
|
83
|
+
target: this.desktopSortSelector,
|
|
84
|
+
handler: this,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
setupResizeObserver() {
|
|
88
|
+
if (!this.resizeObserver)
|
|
89
|
+
return;
|
|
90
|
+
this.resizeObserver.addObserver({
|
|
91
|
+
target: this.sortSelectorContainer,
|
|
92
|
+
handler: this,
|
|
93
|
+
});
|
|
94
|
+
this.resizeObserver.addObserver({
|
|
95
|
+
target: this.desktopSortSelector,
|
|
96
|
+
handler: this,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
get mobileSelectorVisible() {
|
|
100
|
+
return this.selectorBarContainerWidth - 10 < this.desktopSelectorBarWidth;
|
|
101
|
+
}
|
|
102
|
+
handleResize(entry) {
|
|
103
|
+
if (entry.target === this.desktopSortSelector)
|
|
104
|
+
this.desktopSelectorBarWidth = entry.contentRect.width;
|
|
105
|
+
else if (entry.target === this.sortSelectorContainer)
|
|
106
|
+
this.selectorBarContainerWidth = entry.contentRect.width;
|
|
107
|
+
}
|
|
108
|
+
get sortDirectionSelectorTemplate() {
|
|
202
109
|
return html `
|
|
203
|
-
<div id="
|
|
204
|
-
<
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
this.
|
|
210
|
-
}}
|
|
211
|
-
>
|
|
212
|
-
Date Archived
|
|
213
|
-
</button>
|
|
214
|
-
</li>
|
|
215
|
-
<li>
|
|
216
|
-
<button
|
|
217
|
-
@click=${() => {
|
|
218
|
-
this.selectedSort = 'datepublished';
|
|
219
|
-
this.dateSortSelectorVisible = false;
|
|
110
|
+
<div id="sort-direction-selector">
|
|
111
|
+
<button
|
|
112
|
+
id="sort-ascending-btn"
|
|
113
|
+
class="sort-button ${this.sortDirection === 'asc' ? 'selected' : ''}"
|
|
114
|
+
?disabled=${this.selectedSort === 'relevance'}
|
|
115
|
+
@click=${() => {
|
|
116
|
+
this.setSortDirections('asc');
|
|
220
117
|
}}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
this.
|
|
118
|
+
>
|
|
119
|
+
${sortIcon}
|
|
120
|
+
</button>
|
|
121
|
+
<button
|
|
122
|
+
id="sort-descending-btn"
|
|
123
|
+
class="sort-button ${this.sortDirection === 'desc' ? 'selected' : ''}"
|
|
124
|
+
?disabled=${this.selectedSort === 'relevance'}
|
|
125
|
+
@click=${() => {
|
|
126
|
+
this.setSortDirections('desc');
|
|
230
127
|
}}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
128
|
+
>
|
|
129
|
+
${sortIcon}
|
|
130
|
+
</button>
|
|
131
|
+
</div>
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
get desktopSortSelectorTemplate() {
|
|
135
|
+
return html `
|
|
136
|
+
<ul
|
|
137
|
+
id="desktop-sort-selector"
|
|
138
|
+
class=${this.mobileSelectorVisible ? 'hidden' : 'visible'}
|
|
139
|
+
>
|
|
140
|
+
<li id="sort-by-text">Sort By</li>
|
|
141
|
+
<li>
|
|
142
|
+
${this.showRelevance
|
|
143
|
+
? this.getSortDisplayOption(SortField.relevance)
|
|
144
|
+
: nothing}
|
|
145
|
+
</li>
|
|
146
|
+
<li>${this.getSortDisplayOption(SortField.views)}</li>
|
|
147
|
+
<li>${this.getSortDisplayOption(SortField.title)}</li>
|
|
148
|
+
<li>
|
|
149
|
+
${this.getSortDisplayOption(SortField.datearchived, {
|
|
150
|
+
additionalClickEvent: () => {
|
|
151
|
+
this.dateSortSelectorVisible = !this.dateSortSelectorVisible;
|
|
152
|
+
},
|
|
153
|
+
displayName: html `${this.dateSortField}`,
|
|
154
|
+
isSelected: () => this.dateOptionSelected,
|
|
155
|
+
})}
|
|
156
|
+
</li>
|
|
157
|
+
<li>
|
|
158
|
+
${this.getSortDisplayOption(SortField.creator, {
|
|
159
|
+
additionalClickEvent: () => {
|
|
160
|
+
this.creatorSelectorVisible = !this.creatorSelectorVisible;
|
|
161
|
+
},
|
|
162
|
+
})}
|
|
163
|
+
</li>
|
|
164
|
+
</ul>
|
|
165
|
+
`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* This generates each of the sort option links.
|
|
169
|
+
*
|
|
170
|
+
* It manages the display value and the selected state of the option.
|
|
171
|
+
*
|
|
172
|
+
* @param sortField
|
|
173
|
+
* @param options {
|
|
174
|
+
* additionalClickEvent?: () => void; If this is provided, it will also be called when the option is clicked.
|
|
175
|
+
* displayName?: TemplateResult; The name to display for the option. Defaults to the sortField display name.
|
|
176
|
+
* isSelected?: () => boolean; A function that returns true if the option is selected. Defaults to the selectedSort === sortField.
|
|
177
|
+
* }
|
|
178
|
+
* @returns
|
|
179
|
+
*/
|
|
180
|
+
getSortDisplayOption(sortField, options) {
|
|
181
|
+
var _a, _b;
|
|
182
|
+
const isSelected = (_a = options === null || options === void 0 ? void 0 : options.isSelected) !== null && _a !== void 0 ? _a : (() => this.selectedSort === sortField);
|
|
183
|
+
const displayName = (_b = options === null || options === void 0 ? void 0 : options.displayName) !== null && _b !== void 0 ? _b : SortFieldDisplayName[sortField];
|
|
184
|
+
return html `
|
|
185
|
+
<a
|
|
186
|
+
href="#"
|
|
187
|
+
@click=${(e) => {
|
|
188
|
+
var _a;
|
|
189
|
+
e.preventDefault();
|
|
190
|
+
this.setSelectedSort(sortField);
|
|
191
|
+
(_a = options === null || options === void 0 ? void 0 : options.additionalClickEvent) === null || _a === void 0 ? void 0 : _a.call(options, e);
|
|
240
192
|
}}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
193
|
+
class=${isSelected() ? 'selected' : ''}
|
|
194
|
+
>
|
|
195
|
+
${displayName}
|
|
196
|
+
</a>
|
|
197
|
+
`;
|
|
198
|
+
}
|
|
199
|
+
get mobileSortSelectorTemplate() {
|
|
200
|
+
return html `
|
|
201
|
+
<select
|
|
202
|
+
id="mobile-sort-selector"
|
|
203
|
+
@change=${this.mobileSortChanged}
|
|
204
|
+
class=${this.mobileSelectorVisible ? 'visible' : 'hidden'}
|
|
205
|
+
>
|
|
206
|
+
${Object.keys(SortField).map(field => html `
|
|
207
|
+
<option value="${field}" ?selected=${this.selectedSort === field}>
|
|
208
|
+
${SortFieldDisplayName[field]}
|
|
209
|
+
</option>
|
|
210
|
+
`)}
|
|
211
|
+
</select>
|
|
212
|
+
`;
|
|
213
|
+
}
|
|
214
|
+
mobileSortChanged(e) {
|
|
215
|
+
const target = e.target;
|
|
216
|
+
this.setSelectedSort(target.value);
|
|
217
|
+
}
|
|
218
|
+
get displayOptionTemplate() {
|
|
219
|
+
return html `
|
|
220
|
+
<ul>
|
|
221
|
+
${this.displayMode !== 'grid'
|
|
222
|
+
? html `<li>
|
|
223
|
+
<label id="show-details">
|
|
224
|
+
<input
|
|
225
|
+
type="checkbox"
|
|
226
|
+
@click=${this.detailSelected}
|
|
227
|
+
?checked=${this.displayMode === 'list-detail'}
|
|
228
|
+
/>
|
|
229
|
+
Show Details
|
|
230
|
+
</label>
|
|
231
|
+
</li>`
|
|
232
|
+
: nothing}
|
|
233
|
+
|
|
234
|
+
<li>
|
|
235
|
+
<button
|
|
236
|
+
id="grid-button"
|
|
237
|
+
@click=${this.gridSelected}
|
|
238
|
+
class=${this.displayMode === 'grid' ? 'active' : ''}
|
|
239
|
+
>
|
|
240
|
+
${gridIcon}
|
|
241
|
+
</button>
|
|
242
|
+
</li>
|
|
243
|
+
<li>
|
|
244
|
+
<button
|
|
245
|
+
id="list-button"
|
|
246
|
+
@click=${this.listSelected}
|
|
247
|
+
class=${this.displayMode !== 'grid' ? 'active' : ''}
|
|
248
|
+
>
|
|
249
|
+
${listIcon}
|
|
250
|
+
</button>
|
|
251
|
+
</li>
|
|
252
|
+
</ul>
|
|
253
|
+
`;
|
|
254
|
+
}
|
|
255
|
+
get dateSortSelector() {
|
|
256
|
+
return html `
|
|
257
|
+
<div id="date-sort-selector">
|
|
258
|
+
<ul>
|
|
259
|
+
<li>${this.getDateSortButton(SortField.datearchived)}</li>
|
|
260
|
+
<li>${this.getDateSortButton(SortField.datepublished)}</li>
|
|
261
|
+
<li>${this.getDateSortButton(SortField.datereviewed)}</li>
|
|
262
|
+
<li>${this.getDateSortButton(SortField.dateadded)}</li>
|
|
245
263
|
</ul>
|
|
246
264
|
</div>
|
|
247
265
|
`;
|
|
248
266
|
}
|
|
267
|
+
getDateSortButton(sortField) {
|
|
268
|
+
return html `
|
|
269
|
+
<button
|
|
270
|
+
@click=${() => {
|
|
271
|
+
this.selectDateSort(sortField);
|
|
272
|
+
}}
|
|
273
|
+
>
|
|
274
|
+
${SortFieldDisplayName[sortField]}
|
|
275
|
+
</button>
|
|
276
|
+
`;
|
|
277
|
+
}
|
|
278
|
+
selectDateSort(sortField) {
|
|
279
|
+
this.dateSortSelectorVisible = false;
|
|
280
|
+
this.setSelectedSort(sortField);
|
|
281
|
+
}
|
|
282
|
+
setSortDirections(sortDirection) {
|
|
283
|
+
this.sortDirection = sortDirection;
|
|
284
|
+
this.emitSortChangedEvent();
|
|
285
|
+
}
|
|
286
|
+
setSelectedSort(sort) {
|
|
287
|
+
this.selectedSort = sort;
|
|
288
|
+
this.emitSortChangedEvent();
|
|
289
|
+
}
|
|
249
290
|
/**
|
|
250
291
|
* There are four date sort options.
|
|
251
292
|
*
|
|
@@ -274,7 +315,7 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
274
315
|
*/
|
|
275
316
|
get dateSortField() {
|
|
276
317
|
var _a;
|
|
277
|
-
return (
|
|
318
|
+
return (_a = SortFieldDisplayName[this.selectedSort]) !== null && _a !== void 0 ? _a : 'Date Archived';
|
|
278
319
|
}
|
|
279
320
|
get titleSelectorBar() {
|
|
280
321
|
return html ` <alpha-bar
|
|
@@ -302,14 +343,17 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
302
343
|
}
|
|
303
344
|
gridSelected() {
|
|
304
345
|
this.displayMode = 'grid';
|
|
346
|
+
this.emitSortChangedEvent();
|
|
305
347
|
}
|
|
306
348
|
listSelected() {
|
|
307
349
|
this.displayMode = 'list-compact';
|
|
350
|
+
this.emitSortChangedEvent();
|
|
308
351
|
}
|
|
309
352
|
detailSelected(e) {
|
|
310
353
|
this.displayMode = e.target.checked
|
|
311
354
|
? 'list-detail'
|
|
312
355
|
: 'list-compact';
|
|
356
|
+
this.emitSortChangedEvent();
|
|
313
357
|
}
|
|
314
358
|
displayModeChanged() {
|
|
315
359
|
const event = new CustomEvent('displayModeChanged', {
|
|
@@ -317,7 +361,7 @@ let SortFilterBar = class SortFilterBar extends LitElement {
|
|
|
317
361
|
});
|
|
318
362
|
this.dispatchEvent(event);
|
|
319
363
|
}
|
|
320
|
-
|
|
364
|
+
emitSortChangedEvent() {
|
|
321
365
|
const event = new CustomEvent('sortChanged', {
|
|
322
366
|
detail: {
|
|
323
367
|
selectedSort: this.selectedSort,
|
|
@@ -340,6 +384,10 @@ SortFilterBar.styles = css `
|
|
|
340
384
|
padding: 0.5rem 1.5rem;
|
|
341
385
|
}
|
|
342
386
|
|
|
387
|
+
#sort-direction-container {
|
|
388
|
+
flex: 0;
|
|
389
|
+
}
|
|
390
|
+
|
|
343
391
|
#sort-by-text {
|
|
344
392
|
text-transform: uppercase;
|
|
345
393
|
}
|
|
@@ -379,6 +427,11 @@ SortFilterBar.styles = css `
|
|
|
379
427
|
opacity: 1;
|
|
380
428
|
}
|
|
381
429
|
|
|
430
|
+
.sort-button:disabled {
|
|
431
|
+
opacity: 0.25;
|
|
432
|
+
cursor: default;
|
|
433
|
+
}
|
|
434
|
+
|
|
382
435
|
#show-details {
|
|
383
436
|
text-transform: uppercase;
|
|
384
437
|
cursor: pointer;
|
|
@@ -388,43 +441,72 @@ SortFilterBar.styles = css `
|
|
|
388
441
|
transform: rotate(180deg);
|
|
389
442
|
}
|
|
390
443
|
|
|
391
|
-
#sort-direction-
|
|
444
|
+
#sort-direction-selector {
|
|
392
445
|
display: flex;
|
|
393
446
|
flex-direction: column;
|
|
394
447
|
gap: 3px;
|
|
448
|
+
margin-right: 1rem;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
#sort-selector-container {
|
|
452
|
+
flex: 1;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/*
|
|
456
|
+
we move the desktop sort selector offscreen instead of display: none
|
|
457
|
+
because we need to observe the width of it vs its container to determine
|
|
458
|
+
if it's wide enough to display the desktop version and if you displY: none,
|
|
459
|
+
the width becomes 0
|
|
460
|
+
*/
|
|
461
|
+
#desktop-sort-selector.hidden {
|
|
462
|
+
position: absolute;
|
|
463
|
+
top: -9999px;
|
|
464
|
+
left: -9999px;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
#mobile-sort-selector.hidden {
|
|
468
|
+
display: none;
|
|
395
469
|
}
|
|
396
470
|
|
|
397
|
-
#sort-selector
|
|
471
|
+
#desktop-sort-selector {
|
|
472
|
+
display: inline-flex;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
#desktop-sort-selector li {
|
|
398
476
|
display: flex;
|
|
399
477
|
align-items: center;
|
|
400
478
|
}
|
|
401
479
|
|
|
402
|
-
#sort-selector li a {
|
|
480
|
+
#desktop-sort-selector li a {
|
|
403
481
|
text-decoration: none;
|
|
404
482
|
text-transform: uppercase;
|
|
405
483
|
font-size: 1.4rem;
|
|
406
484
|
color: #333;
|
|
407
485
|
}
|
|
408
486
|
|
|
409
|
-
#sort-selector li a.selected {
|
|
487
|
+
#desktop-sort-selector li a.selected {
|
|
410
488
|
font-weight: bold;
|
|
411
489
|
}
|
|
412
490
|
|
|
413
|
-
#sort-selector li::after {
|
|
491
|
+
#desktop-sort-selector li::after {
|
|
414
492
|
content: '•';
|
|
415
493
|
padding-left: 1rem;
|
|
416
494
|
padding-right: 1rem;
|
|
417
495
|
}
|
|
418
496
|
|
|
419
|
-
#sort-selector li:first-child::after {
|
|
497
|
+
#desktop-sort-selector li:first-child::after {
|
|
420
498
|
content: '';
|
|
421
499
|
}
|
|
422
500
|
|
|
423
|
-
#sort-selector li:last-child::after {
|
|
501
|
+
#desktop-sort-selector li:last-child::after {
|
|
424
502
|
content: '';
|
|
425
503
|
}
|
|
426
504
|
|
|
427
|
-
#display-style
|
|
505
|
+
#display-style-selector {
|
|
506
|
+
flex: 0;
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
#display-style-selector button {
|
|
428
510
|
background: none;
|
|
429
511
|
color: inherit;
|
|
430
512
|
border: none;
|
|
@@ -434,11 +516,11 @@ SortFilterBar.styles = css `
|
|
|
434
516
|
opacity: 0.5;
|
|
435
517
|
}
|
|
436
518
|
|
|
437
|
-
#display-style button.active {
|
|
519
|
+
#display-style-selector button.active {
|
|
438
520
|
opacity: 1;
|
|
439
521
|
}
|
|
440
522
|
|
|
441
|
-
#display-style button svg {
|
|
523
|
+
#display-style-selector button svg {
|
|
442
524
|
width: 24px;
|
|
443
525
|
height: 24px;
|
|
444
526
|
}
|
|
@@ -461,6 +543,9 @@ __decorate([
|
|
|
461
543
|
__decorate([
|
|
462
544
|
property({ type: Boolean })
|
|
463
545
|
], SortFilterBar.prototype, "showRelevance", void 0);
|
|
546
|
+
__decorate([
|
|
547
|
+
property({ type: Object })
|
|
548
|
+
], SortFilterBar.prototype, "resizeObserver", void 0);
|
|
464
549
|
__decorate([
|
|
465
550
|
state()
|
|
466
551
|
], SortFilterBar.prototype, "titleSelectorVisible", void 0);
|
|
@@ -470,6 +555,18 @@ __decorate([
|
|
|
470
555
|
__decorate([
|
|
471
556
|
state()
|
|
472
557
|
], SortFilterBar.prototype, "dateSortSelectorVisible", void 0);
|
|
558
|
+
__decorate([
|
|
559
|
+
state()
|
|
560
|
+
], SortFilterBar.prototype, "desktopSelectorBarWidth", void 0);
|
|
561
|
+
__decorate([
|
|
562
|
+
state()
|
|
563
|
+
], SortFilterBar.prototype, "selectorBarContainerWidth", void 0);
|
|
564
|
+
__decorate([
|
|
565
|
+
query('#desktop-sort-selector')
|
|
566
|
+
], SortFilterBar.prototype, "desktopSortSelector", void 0);
|
|
567
|
+
__decorate([
|
|
568
|
+
query('#sort-selector-container')
|
|
569
|
+
], SortFilterBar.prototype, "sortSelectorContainer", void 0);
|
|
473
570
|
SortFilterBar = __decorate([
|
|
474
571
|
customElement('sort-filter-bar')
|
|
475
572
|
], SortFilterBar);
|