ui tweaks:

- add filtering to collection index
- tweak styles for chooser, sorter
This commit is contained in:
Ilya Kreymer
2020-05-29 12:58:30 -07:00
parent afd9d8bca9
commit eebe66cbf5
4 changed files with 134 additions and 47 deletions
+1
View File
@@ -66,6 +66,7 @@ class Chooser extends LitElement
} }
form { form {
flex-grow: 1; flex-grow: 1;
flex-shrink: 0;
} }
input.input.file-name:invalid { input.input.file-name:invalid {
border: 1px dashed red; border: 1px dashed red;
+70 -16
View File
@@ -8,6 +8,8 @@ import fasCopy from '@fortawesome/fontawesome-free/svgs/regular/copy.svg';
import fasArrowUp from '@fortawesome/fontawesome-free/svgs/solid/angle-double-up.svg'; import fasArrowUp from '@fortawesome/fontawesome-free/svgs/solid/angle-double-up.svg';
import fasArrowDown from '@fortawesome/fontawesome-free/svgs/solid/angle-double-down.svg'; import fasArrowDown from '@fortawesome/fontawesome-free/svgs/solid/angle-double-down.svg';
import fasSearch from '@fortawesome/fontawesome-free/svgs/solid/search.svg';
// =========================================================================== // ===========================================================================
class CollIndex extends LitElement class CollIndex extends LitElement
@@ -16,8 +18,11 @@ class CollIndex extends LitElement
super(); super();
this.colls = []; this.colls = [];
this.filteredColls = [];
this.sortedColls = []; this.sortedColls = [];
this.query = "";
this.hideHeader = localStorage.getItem("index:hideHeader") === "1"; this.hideHeader = localStorage.getItem("index:hideHeader") === "1";
this._deleting = {}; this._deleting = {};
@@ -43,6 +48,10 @@ class CollIndex extends LitElement
return { return {
colls: { type: Array }, colls: { type: Array },
query: { type: String },
filteredColls: { type: Array },
sortedColls: { type: Array }, sortedColls: { type: Array },
hideHeader: { type: Boolean }, hideHeader: { type: Boolean },
@@ -59,6 +68,26 @@ class CollIndex extends LitElement
if (changedProperties.has("hideHeader")) { if (changedProperties.has("hideHeader")) {
localStorage.setItem("index:hideHeader", this.hideHeader ? "1" : "0"); localStorage.setItem("index:hideHeader", this.hideHeader ? "1" : "0");
} }
if (changedProperties.has("colls") || changedProperties.has("query")) {
this.filter();
}
}
filter() {
if (!this.query) {
this.filteredColls = this.colls;
return;
}
this.filteredColls = [];
for (const coll of this.colls) {
if (coll.sourceUrl.indexOf(this.query) >= 0 ||
coll.filename.indexOf(this.query) >= 0 ||
(coll.title && coll.title.indexOf(this.query) >= 0)) {
this.filteredColls.push(coll);
}
}
} }
async loadColls() { async loadColls() {
@@ -144,11 +173,26 @@ class CollIndex extends LitElement
.copy:active { .copy:active {
background-color: lightgray; background-color: lightgray;
} }
.sort-header{ .sort-header {
padding-bottom: 0.3rem; padding: 0.3rem 0.3rem 0.3rem 0;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; flex-flow: row wrap;
}
.sort-header .control {
flex: auto;
padding-left: 0.3rem;
width: initial;
}
wr-sorter {
padding: 0.3rem;
}
a.button.is-small.collapse {
border-radius: 6px;
}
.icon.is-left {
margin-left: 0.5rem;
} }
.columns { .columns {
width: 100vw; width: 100vw;
@@ -206,22 +250,31 @@ class CollIndex extends LitElement
</header> </header>
<section class="section no-top-padding"> <section class="section no-top-padding">
<div class="sort-header is-small"> <div class="sort-header is-small">
<a @click=${(e) => this.hideHeader = !this.hideHeader} class="button is-small"> <a @click=${(e) => this.hideHeader = !this.hideHeader} class="collapse button is-small">
<span class="icon"><fa-icon .svg=${this.hideHeader ? fasArrowDown : fasArrowUp}></span> <span class="icon"><fa-icon .svg=${this.hideHeader ? fasArrowDown : fasArrowUp}></span>
<span>${this.hideHeader ? 'Expand' : 'Collapse'}</span> <span>${this.hideHeader ? 'Expand' : 'Collapse'}</span>
</a> </a>
<wr-sorter id="index"
defaultKey="title"
.sortKeys="${CollIndex.sortKeys}"
.data="${this.colls}"
@sort-changed="${(e) => this.sortedColls = e.detail.sortedData}">
</wr-sorter>
</div> </div>
<nav class="panel is-light"> <nav class="panel is-light">
<div class="panel-heading"><span>Loaded Archives</span> <div class="panel-heading"><span>Loaded Archives</span>
</div> </div>
${this.colls.length ? html`
<div class="panel-block sort-header is-small">
<div class="control has-icons-left">
<input type="text" class="input is-small" @input="${(e) => this.query = e.currentTarget.value}" .value="${this.query}" type="text"
placeholder="Search by Archive Title or Source">
<span class="icon is-left is-small"><fa-icon .svg="${fasSearch}"/></span>
</div>
<wr-sorter id="index"
defaultKey="title"
.sortKeys="${CollIndex.sortKeys}"
.data="${this.filteredColls}"
@sort-changed="${(e) => this.sortedColls = e.detail.sortedData}">
</wr-sorter>
</div>
<div class="coll-list"> <div class="coll-list">
${this.sortedColls.length ? html`
${this.sortedColls.map((coll, i) => html` ${this.sortedColls.map((coll, i) => html`
<div class="coll-block panel-block"> <div class="coll-block panel-block">
<div class="columns"> <div class="columns">
@@ -248,12 +301,13 @@ class CollIndex extends LitElement
</div> </div>
`)} `)}
</div> </div>
` : html`
<div class="panel-block extra-padding"> ` : html`
<i>No Archives so far! Archives loaded in the section above will appear here.</i>
</div> <div class="panel-block extra-padding">
`} <i>No Archives so far! Archives loaded in the section above will appear here.</i>
</div> </div>
`}
</nav> </nav>
</section> </section>
`; `;
+3
View File
@@ -94,6 +94,9 @@ class Sorter extends LitElement
:host { :host {
min-width: 100px; min-width: 100px;
} }
button.button.is-small {
border-radius: 4px;
}
`); `);
} }
+60 -31
View File
File diff suppressed because one or more lines are too long