From 22ae5f09d2042a08b95863f7f156a87ab57c6f67 Mon Sep 17 00:00:00 2001 From: dannc Date: Sun, 3 Mar 2019 12:18:49 +0700 Subject: [PATCH] Migrate data to firebase firestore --- src/components/Article/Details.vue | 6 +- src/main.js | 8 +- src/store/articles.js | 188 +++++------------------------ src/views/ArticlePart.vue | 23 +++- 4 files changed, 57 insertions(+), 168 deletions(-) diff --git a/src/components/Article/Details.vue b/src/components/Article/Details.vue index 1789d2b..a900e30 100644 --- a/src/components/Article/Details.vue +++ b/src/components/Article/Details.vue @@ -4,7 +4,7 @@ @@ -36,11 +36,11 @@ - + Открыть diff --git a/src/main.js b/src/main.js index 5da7a96..6e448f4 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,7 @@ import firebase from 'firebase/app'; import VuetifyConfirm from 'vuetify-confirm'; import VueYouTubeEmbed from 'vue-youtube-embed'; import 'firebase/auth'; +import 'firebase/firestore'; import 'vuetify/dist/vuetify.min.css'; import 'material-design-icons-iconfont/dist/material-design-icons.css'; @@ -13,9 +14,12 @@ import router from '@/router'; import store from '@/store'; import firebaseConfig from '@/config/firebase'; -firebase.initializeApp(firebaseConfig); +const firebaseApp = firebase.initializeApp(firebaseConfig); +const db = firebaseApp.firestore(); Vue.config.productionTip = false; +Vue.$db = db; + Vue.use(Vuetify); Vue.use(VuetifyConfirm, { buttonTrueText: 'Да', @@ -32,5 +36,7 @@ new Vue({ firebase.auth().onAuthStateChanged((user) => { this.$store.dispatch('stateChanged', user); }); + + this.$store.dispatch('loadArticles'); } }).$mount('#app'); diff --git a/src/store/articles.js b/src/store/articles.js index fc672f3..6319e3e 100644 --- a/src/store/articles.js +++ b/src/store/articles.js @@ -1,167 +1,39 @@ +import Vue from 'vue'; + export default { state: { - articles: [ - { - id: 'sgjngsnaada312', - title: 'Harry Potter und Stein der Weisen - 1', - description: 'Первая глава первой книги о Гарри Поттере', - imageId: 'asfgdfhmfgn131', - level: ['B2', 'C1'], - rating: 4, - ratingsCount: 164, - youtubePlaylistId: 'asdadsadad', - parts: [ - { - id: 'asdasdad123', - title: 'kapitel 1', - youtubeId: 'asdasdad1', - }, - { - id: 'asdasdad124', - title: 'kapitel 2', - youtubeId: 'asdasdad2', - }, - { - id: 'asdasdad125', - title: 'kapitel 3', - youtubeId: 'asdasdad3', - }, - { - id: 'asdasdad126', - title: 'kapitel 4', - youtubeId: 'asdasdad4', - }, - ], - }, - { - id: 'sgjngsnaadasd2', - title: 'Harry Potter und Stein der Weisen - 2', - description: 'Вторая глава первой книги о Гарри Поттере', - imageId: 'asfgdf111hmfgn131', - level: ['B1', 'B2'], - rating: 3.5, - ratingsCount: 55, - youtubePlaylistId: 'asdadsadad234234', - parts: [ - { - id: 'bsdasdad123', - title: 'kapitel 1', - youtubeId: 'bsdasdad1', - }, - { - id: 'bsdasdad124', - title: 'kapitel 2', - youtubeId: 'bsdasdad2', - }, - { - id: 'bsdasdad125', - title: 'kapitel 3', - youtubeId: 'bsdasdad3', - }, - ], - }, - { - id: 'sgjngsdbfd12as', - title: 'Harry Potter und Stein der Weisen - 3', - description: 'Третья глава первой книги о Гарри Поттере', - imageId: 'asfgdfhmfgn13111', - level: ['A2'], - rating: 2, - ratingsCount: 80, - youtubePlaylistId: 'asdadsada435346', - parts: [ - { - id: 'bsdasdad123', - title: 'kapitel 1', - youtubeId: 'bsdasdad1', - }, - { - id: 'bsdasdad124', - title: 'kapitel 2', - youtubeId: 'bsdasdad2', - }, - { - id: 'bsdasdad125', - title: 'kapitel 3', - youtubeId: 'bsdasdad3', - }, - ], - }, - ], - - articleParts: [ - { - articleId: 'sgjngsnaada312', - articlePartId: 'asdasdad123', - articleTitle: 'Harry Potter und Stein der Weisen - 1', - partTitle: 'kapitel 1', - youtubeId: 'hHW1oY26kxQ', - content: [ - { - sentences: [ - { - origText: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', - transText: 'Бла', - }, - { - origText: 'Praesent ligula odio, interdum pretium ligula eu, vehicula consequat nulla. Etiam a massa iaculis, aliquet metus sit amet, varius odio', - transText: 'Бла2', - }, - { - origText: 'Suspendisse quis mi eget nisl accumsan molestie in vel lorem. Duis ipsum massa, pharetra nec arcu sed, mattis ultricies neque.', - transText: 'Бла3', - }, - { - origText: 'Sed lacinia sed justo sit amet porttitor. Etiam nec nisi nibh. Donec dolor lacus, volutpat in pellentesque vel, accumsan ac nisi.', - transText: 'Бла4', - }, - ], - }, - { - sentences: [ - { - origText: 'Etiam magna dui, pulvinar quis finibus malesuada, vulputate non sem. In hendrerit dui sem, a cursus ipsum interdum non.', - transText: 'Фу1', - }, - { - origText: 'Curabitur porta sagittis lacus.', - transText: 'Фу2', - }, - ], - } - ], - words: [ - { - origWord: 'Hallo', - transWord: 'Привет', - }, - { - origWord: 'Hallo', - transWord: 'Привет', - }, - { - origWord: 'Hallo', - transWord: 'Привет', - }, - { - origWord: 'Hallo', - transWord: 'Привет', - }, - { - origWord: 'Hallo', - transWord: 'Привет', - }, - ], - }, - ], + articles: [], + }, + actions: { + loadArticles({ commit }) { + Vue.$db.collection('articles') + .get() + .then((querySnapshot) => { + const articles = querySnapshot.docs.map((articleSnap) => { + const data = articleSnap.data(); + const { parts } = data; + return { + id: articleSnap.id, + title: data.title, + description: data.description, + imageUrl: data.imageUrl, + level: data.level.slice(), + youtubePlaylistId: data.youtubePlaylistId, + parts: parts ? parts.map(part => Object.assign({}, part)) : [], + }; + }); + + commit('setArticles', articles); + }) + .catch(e => console.error(e)); + }, + }, + getters: { + getArticles: state => state.articles, }, mutations: { setArticles(state, payload) { state.articles = payload; }, }, - getters: { - getArticles: state => state.articles, - getParts: state => state.articleParts, - }, }; diff --git a/src/views/ArticlePart.vue b/src/views/ArticlePart.vue index 8c72f08..dd678fe 100644 --- a/src/views/ArticlePart.vue +++ b/src/views/ArticlePart.vue @@ -12,6 +12,7 @@