|
|
@ -15,7 +15,7 @@ |
|
|
|
v-icon(v-if='isSelected(tag.tag)', color='primary') mdi-checkbox-intermediate |
|
|
|
v-icon(v-else) mdi-checkbox-blank-outline |
|
|
|
v-list-item-title {{tag.title}} |
|
|
|
v-content |
|
|
|
v-content.grey(:class='$vuetify.theme.dark ? `darken-4-d5` : `lighten-3`') |
|
|
|
v-toolbar(color='primary', dark, flat, height='58') |
|
|
|
template(v-if='selection.length > 0') |
|
|
|
.overline.mr-3.animated.fadeInLeft Current Selection |
|
|
@ -41,6 +41,7 @@ |
|
|
|
.overline.animated.fadeInRight Select one or more tags |
|
|
|
v-toolbar(:color='$vuetify.theme.dark ? `grey darken-4-l5` : `grey lighten-4`', flat, height='58') |
|
|
|
v-text-field.tags-search( |
|
|
|
v-model='innerSearch' |
|
|
|
label='Search within results...' |
|
|
|
solo |
|
|
|
hide-details |
|
|
@ -50,6 +51,7 @@ |
|
|
|
height='40' |
|
|
|
prepend-icon='mdi-file-document-box-search-outline' |
|
|
|
append-icon='mdi-arrow-right' |
|
|
|
clearable |
|
|
|
) |
|
|
|
template(v-if='locales.length > 1') |
|
|
|
v-divider.mx-3(vertical) |
|
|
@ -86,9 +88,62 @@ |
|
|
|
v-btn(text, height='40'): v-icon(size='20') mdi-chevron-double-up |
|
|
|
v-btn(text, height='40'): v-icon(size='20') mdi-chevron-double-down |
|
|
|
v-divider |
|
|
|
.text-center.pt-10 |
|
|
|
.text-center.pt-10(v-if='selection.length < 1') |
|
|
|
img(src='/svg/icon-price-tag.svg') |
|
|
|
.subtitle-2.grey--text Select one or more tags on the left. |
|
|
|
.px-5.py-2(v-else) |
|
|
|
v-data-iterator( |
|
|
|
:items='pages' |
|
|
|
:items-per-page='4' |
|
|
|
:search='innerSearch' |
|
|
|
:loading='isLoading' |
|
|
|
:options.sync='pagination' |
|
|
|
hide-default-footer |
|
|
|
ref='dude' |
|
|
|
) |
|
|
|
template(v-slot:loading) |
|
|
|
.text-center.pt-10 |
|
|
|
v-progress-circular( |
|
|
|
indeterminate |
|
|
|
color='primary' |
|
|
|
size='96' |
|
|
|
width='2' |
|
|
|
) |
|
|
|
.subtitle-2.grey--text.mt-5 Retrieving page results... |
|
|
|
template(v-slot:no-data) |
|
|
|
.text-center.pt-10 |
|
|
|
img(src='/svg/icon-info.svg') |
|
|
|
.subtitle-2.grey--text Couldn't find any page with the selected tags. |
|
|
|
template(v-slot:no-results) |
|
|
|
.text-center.pt-10 |
|
|
|
img(src='/svg/icon-info.svg') |
|
|
|
.subtitle-2.grey--text Couldn't find any page matching the current filtering options. |
|
|
|
template(v-slot:default='props') |
|
|
|
v-row(align='stretch') |
|
|
|
v-col( |
|
|
|
v-for='item of props.items' |
|
|
|
:key='`page-` + item.id' |
|
|
|
cols='12' |
|
|
|
lg='6' |
|
|
|
) |
|
|
|
v-card.radius-7( |
|
|
|
@click='goTo(item)' |
|
|
|
style='height:100%;' |
|
|
|
:class='$vuetify.theme.dark ? `grey darken-4` : ``' |
|
|
|
) |
|
|
|
v-card-text |
|
|
|
.d-flex.flex-row.align-center |
|
|
|
.body-1: strong.primary--text {{item.title}} |
|
|
|
v-spacer |
|
|
|
.caption Last updated {{item.updatedAt | moment('from')}} |
|
|
|
.body-2.grey--text {{item.description || '---'}} |
|
|
|
v-divider.my-2 |
|
|
|
.d-flex.flex-row.align-center |
|
|
|
v-chip(small, label, :color='$vuetify.theme.dark ? `grey darken-3-l5` : `grey lighten-4`').overline {{item.locale}} |
|
|
|
.caption.ml-1 / {{item.path}} |
|
|
|
.text-center.py-2.animated.fadeInDown(v-if='this.pageTotal > 1') |
|
|
|
v-pagination(v-model='pagination.page', :length='pageTotal') |
|
|
|
|
|
|
|
nav-footer |
|
|
|
notify |
|
|
|
search-results |
|
|
@ -100,6 +155,7 @@ import VueRouter from 'vue-router' |
|
|
|
import _ from 'lodash' |
|
|
|
|
|
|
|
import tagsQuery from 'gql/common/common-pages-query-tags.gql' |
|
|
|
import pagesQuery from 'gql/common/common-pages-query-list.gql' |
|
|
|
|
|
|
|
/* global siteLangs */ |
|
|
|
|
|
|
@ -113,17 +169,27 @@ export default { |
|
|
|
return { |
|
|
|
tags: [], |
|
|
|
selection: [], |
|
|
|
innerSearch: '', |
|
|
|
locale: 'any', |
|
|
|
locales: [], |
|
|
|
orderBy: 'TITLE', |
|
|
|
orderBy: 'title', |
|
|
|
orderByItems: [ |
|
|
|
{ text: 'Creation Date', value: 'CREATED' }, |
|
|
|
{ text: 'ID', value: 'ID' }, |
|
|
|
{ text: 'Last Modified', value: 'UPDATED' }, |
|
|
|
{ text: 'Path', value: 'PATH' }, |
|
|
|
{ text: 'Title', value: 'TITLE' } |
|
|
|
{ text: 'Creation Date', value: 'createdAt' }, |
|
|
|
{ text: 'ID', value: 'id' }, |
|
|
|
{ text: 'Last Modified', value: 'updatedAt' }, |
|
|
|
{ text: 'Path', value: 'path' }, |
|
|
|
{ text: 'Title', value: 'title' } |
|
|
|
], |
|
|
|
orderByDirection: 0, |
|
|
|
pagination: { |
|
|
|
page: 1, |
|
|
|
itemsPerPage: 12, |
|
|
|
mustSort: true, |
|
|
|
sortBy: ['title'], |
|
|
|
sortDesc: [false] |
|
|
|
}, |
|
|
|
pages: [], |
|
|
|
isLoading: true, |
|
|
|
scrollStyle: { |
|
|
|
vuescroll: {}, |
|
|
|
scrollPanel: { |
|
|
@ -154,6 +220,9 @@ export default { |
|
|
|
}, |
|
|
|
tagsSelected () { |
|
|
|
return _.filter(this.tags, t => _.includes(this.selection, t.tag)) |
|
|
|
}, |
|
|
|
pageTotal () { |
|
|
|
return Math.ceil(this.pages.length / this.pagination.itemsPerPage) |
|
|
|
} |
|
|
|
}, |
|
|
|
watch: { |
|
|
@ -162,9 +231,11 @@ export default { |
|
|
|
}, |
|
|
|
orderBy (newValue, oldValue) { |
|
|
|
this.rebuildURL() |
|
|
|
this.pagination.sortBy = [newValue] |
|
|
|
}, |
|
|
|
orderByDirection (newValue, oldValue) { |
|
|
|
this.rebuildURL() |
|
|
|
this.pagination.sortDesc = [newValue === 1] |
|
|
|
} |
|
|
|
}, |
|
|
|
router, |
|
|
@ -186,6 +257,7 @@ export default { |
|
|
|
this.selection.push(tag) |
|
|
|
} |
|
|
|
this.rebuildURL() |
|
|
|
console.info(this.$refs.dude) |
|
|
|
}, |
|
|
|
isSelected (tag) { |
|
|
|
return _.includes(this.selection, tag) |
|
|
@ -204,6 +276,9 @@ export default { |
|
|
|
_.set(urlObj, 'query.dir', this.orderByDirection === 0 ? `asc` : `desc`) |
|
|
|
} |
|
|
|
this.$router.push(urlObj) |
|
|
|
}, |
|
|
|
goTo (page) { |
|
|
|
window.location.assign(`/${page.locale}/${page.path}`) |
|
|
|
} |
|
|
|
}, |
|
|
|
apollo: { |
|
|
@ -214,6 +289,24 @@ export default { |
|
|
|
watchLoading (isLoading) { |
|
|
|
this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'tags-refresh') |
|
|
|
} |
|
|
|
}, |
|
|
|
pages: { |
|
|
|
query: pagesQuery, |
|
|
|
fetchPolicy: 'cache-and-network', |
|
|
|
update: (data) => _.cloneDeep(data.pages.list), |
|
|
|
watchLoading (isLoading) { |
|
|
|
this.isLoading = isLoading |
|
|
|
this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'pages-refresh') |
|
|
|
}, |
|
|
|
variables () { |
|
|
|
return { |
|
|
|
locale: this.locale === 'any' ? null : this.locale, |
|
|
|
tags: this.selection |
|
|
|
} |
|
|
|
}, |
|
|
|
skip () { |
|
|
|
return this.selection.length < 1 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|