From 96f3dda1723645ea57ef17cfbb2ee5a4657f3d94 Mon Sep 17 00:00:00 2001 From: Joe Wroten Date: Tue, 16 May 2017 07:07:31 -0500 Subject: [PATCH] Refactored to use routes and App.vue --- src/App.vue | 76 ++++++++++-- src/components/Footer.vue | 43 +++++++ src/components/Headerprimary.vue | 47 ++++++++ src/components/Headersecondary.vue | 61 ++++++++++ src/components/Index.vue | 180 ++--------------------------- src/components/Myspells.vue | 35 ++++++ src/components/Spelllist.vue | 29 ++--- src/router.js | 1 + src/store.js | 14 ++- 9 files changed, 280 insertions(+), 206 deletions(-) create mode 100644 src/components/Footer.vue create mode 100644 src/components/Headerprimary.vue create mode 100644 src/components/Headersecondary.vue create mode 100644 src/components/Myspells.vue diff --git a/src/App.vue b/src/App.vue index 326d3f9..f250163 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,15 +1,75 @@ +import { Loading, Dialog } from 'quasar' +import Vue from 'vue' +import 'whatwg-fetch' +import { state, dispatch } from './store' +import HeaderPrimary from './components/Headerprimary' +import HeaderSecondary from './components/Headersecondary' +import Footer from './components/Footer' - +Vue.component('nav-header-primary', HeaderPrimary) +Vue.component('nav-header-secondary', HeaderSecondary) +Vue.component('nav-footer', Footer) + +function fetchSuccess (data) { + dispatch({ + type: 'SPELLS_RESOLVED', + data: { + data, + loaded: true + } + }) +} + +function fetchFailure (reason) { + let message = 'Unable to retrieve spells list' + Dialog.create({ + title: 'Error', + message, + nobuttons: true + }) + console.error(message, reason) +} + +export default { + data () { + return { state } + }, + mounted () { + if (!this.state.spells.loaded) { + Loading.show() + + fetch('./statics/dnd5e.json') + .then(response => response.json()) + .then(fetchSuccess) + .catch(fetchFailure) + .then(() => { Loading.hide() }) + } + } +} + diff --git a/src/components/Footer.vue b/src/components/Footer.vue new file mode 100644 index 0000000..e5cb42a --- /dev/null +++ b/src/components/Footer.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/Headerprimary.vue b/src/components/Headerprimary.vue new file mode 100644 index 0000000..853e19d --- /dev/null +++ b/src/components/Headerprimary.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/Headersecondary.vue b/src/components/Headersecondary.vue new file mode 100644 index 0000000..98b734d --- /dev/null +++ b/src/components/Headersecondary.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/Index.vue b/src/components/Index.vue index cef9f9b..d516d4a 100644 --- a/src/components/Index.vue +++ b/src/components/Index.vue @@ -1,187 +1,21 @@ - - diff --git a/src/components/Myspells.vue b/src/components/Myspells.vue new file mode 100644 index 0000000..d34b39f --- /dev/null +++ b/src/components/Myspells.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/components/Spelllist.vue b/src/components/Spelllist.vue index 988714a..49ec066 100644 --- a/src/components/Spelllist.vue +++ b/src/components/Spelllist.vue @@ -18,42 +18,31 @@ import Vue from 'vue' import Query from '../query' import SpellItem from './Spellitem' +import { state } from '../store' Vue.component('spell-item', SpellItem) export default { - props: [ - 'spells', - 'search', - 'sortBy' - ], data () { - return { - loadedPage: 1 - } + return { state } }, + props: [ + 'spells' + ], computed: { filteredSpells () { return new Query(this.spells) - .search('name', this.search) - .sort(this.sortBy) - .paginate(1, this.loadedPage * 20) + .search('name', this.state.search) + .sort(this.state.sortBy) + .paginate(1, this.state.loadedPagination * 20) .results } }, methods: { loadMore (index, done) { - this.loadedPage += 1 + this.state.loadedPagination += 1 done() } - }, - watch: { - sortBy (newSort) { - console.log(newSort) - }, - search () { - this.loadedPage = 1 - } } } diff --git a/src/router.js b/src/router.js index 4676518..947bce2 100644 --- a/src/router.js +++ b/src/router.js @@ -22,6 +22,7 @@ export default new VueRouter({ routes: [ { path: '/', component: load('Index') }, // Default + { path: '/my', component: load('Myspells') }, { path: '*', component: load('Error404') } // Not found ] }) diff --git a/src/store.js b/src/store.js index ae5bdf8..63d4388 100644 --- a/src/store.js +++ b/src/store.js @@ -3,7 +3,11 @@ export let state = { loaded: false, data: [] }, - chosen: [] + chosen: [], + search: '', + sortBy: 'name', + previousSortBy: 'name', + loadedPagination: 1 } export function dispatch (action) { @@ -20,10 +24,10 @@ export function dispatch (action) { if (index >= 0) state.chosen.splice(index, 1) } break + case 'SEARCH_CHANGED': + state.loadedPagination = 1 + break } } -export default { - state, - dispatch -} +export default { state, dispatch }