diff options
author | devlinjunker <devlin.junker@gmail.com> | 2022-06-08 23:55:37 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-09 08:55:37 +0200 |
commit | 40d9c352aba5351c7a55a63e5bc0508141f51224 (patch) | |
tree | 1b50a4f622b40953189d99d5519fac08551f7fd1 /src | |
parent | b036d309c27132e4f10df952e9335afdb3edfeb5 (diff) |
[Vue Rewrite] Fix CI Jobs (#1816)
* attempt to fix linting
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* working linting/stylelint
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* fix npm build
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* working with node 16 and npm build
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* fix linting
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* add @babel/eslint-parser
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* remove babel-eslint
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* use node 16 in lint
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* proper syntax
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* fix syntax
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* update version
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* attempt to undo indentation changes
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* revert indentation on css and update stylelint rule for now (for simpler PR)
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* revert indentation changes in vue/js files and update eslint to pass this (for now)
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* try to cleanup disabled rules
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* remove last disabled rules in js files
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* add basic changelog
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* update calendar-js to 3.0
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
* remove npm test with TODO (this will fail CI) and remove calendar-js dependency
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/App.vue | 18 | ||||
-rw-r--r-- | src/components/AddFeed.vue | 148 | ||||
-rw-r--r-- | src/components/Explore.vue | 81 | ||||
-rw-r--r-- | src/components/Sidebar.vue | 155 | ||||
-rw-r--r-- | src/main.js | 101 |
5 files changed, 281 insertions, 222 deletions
diff --git a/src/App.vue b/src/App.vue index b4119937e..2dbcd70fe 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,10 +1,10 @@ <template> - <Content app-name="news"> - <Sidebar /> + <Content app-name="news"> + <Sidebar /> <AppContent> - <router-view></router-view> + <router-view /> </AppContent> - </Content> + </Content> </template> <script> @@ -13,14 +13,14 @@ import AppContent from '@nextcloud/vue/dist/Components/AppContent' import Sidebar from './components/Sidebar.vue' export default { - components: { - Content, - Sidebar, + components: { + Content, + Sidebar, AppContent, - }, + }, created() { this.$store.dispatch('loadFolder') - } + }, } </script> diff --git a/src/components/AddFeed.vue b/src/components/AddFeed.vue index 2adacd8ad..a07125d3a 100644 --- a/src/components/AddFeed.vue +++ b/src/components/AddFeed.vue @@ -1,41 +1,45 @@ <template> <Modal @close="$emit('close')"> <div id="new-feed" news-add-feed="Navigation.feed"> - <form ng-submit="Navigation.createFeed(Navigation.feed)" - ng-init="Navigation.feed.autoDiscover=true" - name="feedform"> + ng-init="Navigation.feed.autoDiscover=true" + name="feedform"> <fieldset ng-disabled="Navigation.addingFeed" style="padding: 16px"> <input type="text" - :value="feed" - ng-model="Navigation.feed.url" - ng-class="{'ng-invalid': + :value="feed" + ng-model="Navigation.feed.url" + ng-class="{'ng-invalid': !Navigation.addingFeed && Navigation.feedUrlExists(Navigation.feed.url) }" - :placeholder="t('news','Web address')" - name="address" - pattern="[^\s]+" - required - autofocus> + :placeholder="t('news', 'Web address')" + name="address" + pattern="[^\s]+" + required + autofocus /> <p class="error" - ng-show="!Navigation.addingFeed && + ng-show="!Navigation.addingFeed && Navigation.feedUrlExists(Navigation.feed.url)"> - {{ t('news', 'Feed exists already!') }} + {{ t("news", "Feed exists already!") }} </p> <!-- select a folder --> <CheckboxRadioSwitch :checked.sync="createNewFolder" type="switch"> - {{ t('news', 'New folder') }}? + {{ t("news", "New folder") }}? </CheckboxRadioSwitch> - <Multiselect v-if="!createNewFolder" v-model="folder" :options="folders" track-by="id" label="name"/> + <Multiselect v-if="!createNewFolder" + v-model="folder" + :options="folders" + track-by="id" + label="name" /> <!-- add a folder --> - <input type="text" - ng-model="Navigation.feed.newFolder" - ng-class="{'ng-invalid': + <input v-if="createNewFolder" + type="text" + ng-model="Navigation.feed.newFolder" + ng-class="{'ng-invalid': !Navigation.addingFeed && !Navigation.addingFeed && Navigation.showNewFolder && @@ -43,52 +47,59 @@ Navigation.feed.newFolder ) }" - :placeholder="t('news','Folder name')" - name="folderName" - v-if="createNewFolder" - style="width: 90%" - required> - + :placeholder="t('news', 'Folder name')" + name="folderName" + style="width: 90%" + required /> - <p class="error" ng-show="!Navigation.addingFeed && + <p class="error" + ng-show="!Navigation.addingFeed && Navigation.folderNameExists(Navigation.feed.newFolder)"> - {{ t('news', 'Folder exists already!') }} + {{ t("news", "Folder exists already!") }} </p> <!-- basic auth --> <CheckboxRadioSwitch :checked.sync="withBasicAuth" type="switch"> - {{ t('news', 'Credentials') }}? + {{ t("news", "Credentials") }}? </CheckboxRadioSwitch> <div v-if="withBasicAuth" class="add-feed-basicauth"> - <p class="warning">{{ - t('news', - 'HTTP Basic Auth credentials must be stored unencrypted! Everyone with access to the server or database will be able to access them!') - }}></p> + <p class="warning"> + {{ + t( + "news", + "HTTP Basic Auth credentials must be stored unencrypted! Everyone with access to the server or database will be able to access them!" + ) + }}> + </p> <input type="text" - ng-model="Navigation.feed.user" - :placeholder="t('news','Username')" - name="user" - autofocus> + ng-model="Navigation.feed.user" + :placeholder="t('news', 'Username')" + name="user" + autofocus /> <input type="password" - ng-model="Navigation.feed.password" - :placeholder="t('news','Password')" - name="password" autocomplete="new-password"> + ng-model="Navigation.feed.password" + :placeholder="t('news', 'Password')" + name="password" + autocomplete="new-password" /> </div> <CheckboxRadioSwitch :checked.sync="autoDiscover" type="switch"> - {{ t('news', 'Auto discover Feed') }}? + {{ t("news", "Auto discover Feed") }}? </CheckboxRadioSwitch> - <Button :wide="true" type="primary" @click="addFeed()" ng-disabled=" + <Button :wide="true" + type="primary" + ng-disabled=" Navigation.feedUrlExists(Navigation.feed.url) || ( Navigation.showNewFolder && Navigation.folderNameExists(folder.name) - )"> - {{t('news','Subscribe')}} + )" + @click="addFeed()"> + {{ t("news", "Subscribe") }} </Button> </fieldset> </form> @@ -97,6 +108,8 @@ </template> <script> +/* eslint-disable vue/require-prop-type-constructor */ + import Modal from '@nextcloud/vue/dist/Components/Modal' import CheckboxRadioSwitch from '@nextcloud/vue/dist/Components/CheckboxRadioSwitch' import Button from '@nextcloud/vue/dist/Components/Button' @@ -107,42 +120,51 @@ export default { Modal, CheckboxRadioSwitch, Button, - Multiselect + Multiselect, + }, + props: { + feed: '', + }, + emits: ['close'], + data() { + return { + folder: {}, + autoDiscover: true, + createNewFolder: false, + withBasicAuth: false, + } }, computed: { folders() { return this.$store.state.folders - } + }, }, methods: { newFolder() { - this.createNewFolder = true; + this.createNewFolder = true }, abortNewFolder() { - this.createNewFolder = false; + this.createNewFolder = false }, addFeed() { - this.$store.dispatch('addFeed', {feedReq: { url: this.feed, folder: this.folder, autoDiscover: true}}) - } - }, - props: { - feed: '', - folder: {}, - autoDiscover: true, - withBasicAuth: false, - createNewFolder: false + this.$store.dispatch('addFeed', { + feedReq: { + url: this.feed, + folder: this.folder, + autoDiscover: true, + }, + }) + }, }, - emits: ['close'] } </script> <style scoped> +input { + width: 100% +} - input { - width: 100%; - } - .multiselect { - width: 100%; - } - +.multiselect { + width: 100% +} </style> diff --git a/src/components/Explore.vue b/src/components/Explore.vue index 5738649cf..e37f66aa7 100644 --- a/src/components/Explore.vue +++ b/src/components/Explore.vue @@ -1,13 +1,18 @@ <template> <div id="explore"> - <AddFeed v-if="showAddFeed" @close="closeShowAddFeed()" :feed="feed"></AddFeed> + <AddFeed v-if="showAddFeed" :feed="feed" @close="closeShowAddFeed()" /> <div class="grid-container"> - <div v-for="entry in explorableSites" class="explore-feed grid-item"> - <h2 class="explore-title" v-if="entry.favicon" - :style="{ backgroundImage: 'url(' + entry.favicon + ')'}"> - <a target="_blank" rel="noreferrer" :href="entry.url">{{ entry.title }}</a> + <div v-for="entry in explorableSites" + :key="entry.title" + class="explore-feed grid-item"> + <h2 v-if="entry.favicon" + class="explore-title" + :style="{ backgroundImage: 'url(' + entry.favicon + ')' }"> + <a target="_blank" rel="noreferrer" :href="entry.url">{{ + entry.title + }}</a> </h2> - <h2 class="icon-rss explore-title" v-if="!entry.favicon"> + <h2 v-if="!entry.favicon" class="icon-rss explore-title"> {{ entry.title }} </h2> <div class="explore-content"> @@ -18,7 +23,7 @@ </div> </div> <Button @click="subscribe(entry.feed)"> - {{ t('news', 'Subscribe to') }} {{ entry.title }} + {{ t("news", "Subscribe to") }} {{ entry.title }} </Button> </div> </div> @@ -26,53 +31,57 @@ </template> <script> -import Modal from '@nextcloud/vue/dist/Components/Modal' +/* eslint-disable vue/require-prop-type-constructor */ + +// import Modal from '@nextcloud/vue/dist/Components/Modal' import Button from '@nextcloud/vue/dist/Components/Button' -import axios from "@nextcloud/axios"; -import AddFeed from "./AddFeed"; -import {generateUrl} from "@nextcloud/router"; +import axios from '@nextcloud/axios' +import AddFeed from './AddFeed' +import { generateUrl } from '@nextcloud/router' export default { components: { - Modal, + // Modal, Button, - AddFeed + AddFeed, }, props: { - explorableSites: { - type: Array, - default: () => [], - required: true, - }, - showAddFeed: false, - feed: '' + feed: '', + }, + data() { + return { + explorableSites: [], + showAddFeed: false, + } + }, + created() { + this.sites() }, methods: { async sites() { - const settings = await axios.get(generateUrl("/apps/news/settings")); - console.log(settings.data); - console.log(settings.data.settings.exploreUrl); + const settings = await axios.get( + generateUrl('/apps/news/settings') + ) + // console.log(settings.data) + // console.log(settings.data.settings.exploreUrl) - const exploreUrl = settings.data.settings.exploreUrl + 'feeds.en.json'; - const explore = await axios.get(exploreUrl); - console.log(explore.data); + const exploreUrl + = settings.data.settings.exploreUrl + 'feeds.en.json' + const explore = await axios.get(exploreUrl) - Object.keys(explore.data).forEach(key => - explore.data[key].forEach(value => + Object.keys(explore.data).forEach((key) => + explore.data[key].forEach((value) => this.explorableSites.push(value) ) - ); + ) }, async subscribe(feed) { - this.feed = feed; - this.showAddFeed = true; + // this.feed = feed + this.showAddFeed = true }, closeShowAddFeed() { - this.showAddFeed = false; - } + this.showAddFeed = false + }, }, - created() { - this.sites(); - } } </script> diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue index 33923f89b..e73719fff 100644 --- a/src/components/Sidebar.vue +++ b/src/components/Sidebar.vue @@ -1,20 +1,18 @@ <template> <AppNavigation> - <AddFeed v-if="showAddFeed" @close="closeShowAddFeed()"></AddFeed> - <AppNavigationNew - :text="t('news','Subscribe')" + <AddFeed v-if="showAddFeed" @close="closeShowAddFeed()" /> + <AppNavigationNew :text="t('news', 'Subscribe')" button-id="new-feed-button" button-class="icon-add" - @click="showShowAddFeed()"/> + @click="showShowAddFeed()" /> <ul id="locations" class="with-icon"> + <AppNavigationNewItem :title="t('news', 'New folder')" + icon="icon-add-folder" + @new-item="newFolder" /> - <AppNavigationNewItem :title="t('news','New folder')" - icon="icon-add-folder" - @new-item="newFolder"> - </AppNavigationNewItem> - - <AppNavigationItem :title="t('news','Unread articles')" icon="icon-rss"> + <AppNavigationItem :title="t('news', 'Unread articles')" + icon="icon-rss"> <template #actions> <ActionButton icon="icon-checkmark" @click="alert('Edit')"> t('news','Mark read') @@ -24,86 +22,109 @@ <CounterBubble>5</CounterBubble> </template> </AppNavigationItem> - <AppNavigationItem :title="t('news','All articles')" icon="icon-rss"> + <AppNavigationItem :title="t('news', 'All articles')" + icon="icon-rss"> <template #actions> <ActionButton icon="icon-checkmark" @click="alert('Edit')"> t('news','Mark read') </ActionButton> </template> </AppNavigationItem> - <AppNavigationItem :title="t('news','Starred')" icon="icon-starred"> + <AppNavigationItem :title="t('news', 'Starred')" + icon="icon-starred"> <template #counter> <CounterBubble>35</CounterBubble> </template> </AppNavigationItem> - <AppNavigationItem v-for="folder in folders" :title="folder.name" icon="icon-folder" - :allowCollapse="true"> + <AppNavigationItem v-for="folder in folders" + :key="folder.name" + :title="folder.name" + icon="icon-folder" + :allow-collapse="true"> <template #default> - <AppNavigationItem v-for="feed in folder.feeds" :title="feed.title" > + <AppNavigationItem v-for="feed in folder.feeds" + :key="feed.name" + :title="feed.title"> <template #icon> - <img :src="feed.faviconLink" v-if="feed.faviconLink" alt="feedIcon"> - <div class="icon-rss" v-if="!feed.faviconLink"></div> + <img v-if="feed.faviconLink" + :src="feed.faviconLink" + alt="feedIcon"> + <div v-if="!feed.faviconLink" class="icon-rss" /> </template> <template #actions> - <ActionButton icon="icon-checkmark" @click="alert('Mark read')"> - {{ t('news', 'Mark read') }} + <ActionButton icon="icon-checkmark" + @click="alert('Mark read')"> + {{ t("news", "Mark read") }} </ActionButton> - <ActionButton icon="icon-pinned" @click="alert('Rename')"> - {{ t('news', 'Unpin from top') }} + <ActionButton icon="icon-pinned" + @click="alert('Rename')"> + {{ t("news", "Unpin from top") }} </ActionButton> - <ActionButton icon="icon-caret-dark" @click="deleteFolder(folder)"> - {{ t('news', 'Newest first') }} + <ActionButton icon="icon-caret-dark" + @click="deleteFolder(folder)"> + {{ t("news", "Newest first") }} </ActionButton> - <ActionButton icon="icon-caret-dark" @click="deleteFolder(folder)"> - {{ t('news', 'Oldest first') }} + <ActionButton icon="icon-caret-dark" + @click="deleteFolder(folder)"> + {{ t("news", "Oldest first") }} </ActionButton> - <ActionButton icon="icon-caret-dark" @click="deleteFolder(folder)"> - {{ t('news', 'Default order') }} + <ActionButton icon="icon-caret-dark" + @click="deleteFolder(folder)"> + {{ t("news", "Default order") }} </ActionButton> - <ActionButton icon="icon-full-text-disabled" @click="deleteFolder(folder)"> - {{ t('news', 'Enable full text') }} + <ActionButton icon="icon-full-text-disabled" + @click="deleteFolder(folder)"> + {{ t("news", "Enable full text") }} </ActionButton> - <ActionButton icon="icon-full-text-enabled" @click="deleteFolder(folder)"> - {{ t('news', 'Disable full text') }} + <ActionButton icon="icon-full-text-enabled" + @click="deleteFolder(folder)"> + {{ t("news", "Disable full text") }} </ActionButton> - <ActionButton icon="icon-updatemode-default" @click="deleteFolder(folder)"> - {{ t('news', 'Unread updated') }} + <ActionButton icon="icon-updatemode-default" + @click="deleteFolder(folder)"> + {{ t("news", "Unread updated") }} </ActionButton> - <ActionButton icon="icon-updatemode-unread" @click="deleteFolder(folder)"> - {{ t('news', 'Ignore updated') }} + <ActionButton icon="icon-updatemode-unread" + @click="deleteFolder(folder)"> + {{ t("news", "Ignore updated") }} </ActionButton> - <ActionButton icon="icon-icon-rss" @click="deleteFolder(folder)"> - {{ t('news', 'Open feed URL') }} + <ActionButton icon="icon-icon-rss" + @click="deleteFolder(folder)"> + {{ t("news", "Open feed URL") }} </ActionButton> - <ActionButton icon="icon-icon-rename" @click="deleteFolder(folder)"> - {{ t('news', 'Rename') }} + <ActionButton icon="icon-icon-rename" + @click="deleteFolder(folder)"> + {{ t("news", "Rename") }} </ActionButton> - <ActionButton icon="icon-delete" @click="deleteFolder(folder)"> - {{ t('news', 'Delete') }} + <ActionButton icon="icon-delete" + @click="deleteFolder(folder)"> + {{ t("news", "Delete") }} </ActionButton> </template> </AppNavigationItem> </template> - <template #counter v-if="folder.feedCount > 0"> + <template v-if="folder.feedCount > 0" #counter> <CounterBubble>{{ folder.feedCount }}</CounterBubble> </template> <template #actions> - <ActionButton icon="icon-checkmark" @click="alert('Mark read')"> - {{ t('news', 'Mark read') }} + <ActionButton icon="icon-checkmark" + @click="alert('Mark read')"> + {{ t("news", "Mark read") }} </ActionButton> <ActionButton icon="icon-rename" @click="alert('Rename')"> - {{ t('news', 'Rename') }} + {{ t("news", "Rename") }} </ActionButton> - <ActionButton icon="icon-delete" @click="deleteFolder(folder)"> - {{ t('news', 'Delete') }} + <ActionButton icon="icon-delete" + @click="deleteFolder(folder)"> + {{ t("news", "Delete") }} </ActionButton> </template> </AppNavigationItem> - <AppNavigationItem :title="t('news','Explore')" - icon="icon-link" - :to="{ name: 'explore' }"> + <AppNavigationItem :title="t('news', 'Explore')" + icon="icon-link" + :to="{ name: 'explore' }"> <template #counter> <CounterBubble>35</CounterBubble> </template> @@ -113,14 +134,15 @@ </template> <script> + import AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation' import AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew' import AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem' import AppNavigationNewItem from '@nextcloud/vue/dist/Components/AppNavigationNewItem' -import AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter' +// import AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter' import CounterBubble from '@nextcloud/vue/dist/Components/CounterBubble' import ActionButton from '@nextcloud/vue/dist/Components/ActionButton' -import AddFeed from "./AddFeed"; +import AddFeed from './AddFeed' export default { components: { @@ -128,37 +150,38 @@ export default { AppNavigationNew, AppNavigationItem, AppNavigationNewItem, - AppNavigationCounter, + // AppNavigationCounter, CounterBubble, ActionButton, - AddFeed + AddFeed, }, - props: { - showAddFeed: false, + data() { + return { + showAddFeed: false, + } }, computed: { folders() { return this.$store.state.folders }, }, + created() {}, methods: { newFolder(value) { - const folderName = value.trim(); - const folder = {name: folderName}; - this.$store.dispatch('addFolder', {folder}) + const folderName = value.trim() + const folder = { name: folderName } + this.$store.dispatch('addFolder', { folder }) }, deleteFolder(folder) { - this.$store.dispatch('deleteFolder', {folder}) - window.location.reload(true); + this.$store.dispatch('deleteFolder', { folder }) + window.location.reload(true) }, showShowAddFeed() { - this.showAddFeed = true; + this.showAddFeed = true }, closeShowAddFeed() { - this.showAddFeed = false; - } + this.showAddFeed = false + }, }, - created() { - } } </script> diff --git a/src/main.js b/src/main.js index 51aec5617..54fecf3d9 100644 --- a/src/main.js +++ b/src/main.js @@ -1,10 +1,13 @@ + import Vue from 'vue' import App from './App' import VueRouter from 'vue-router' import Explore from './components/Explore' -import {generateUrl} from "@nextcloud/router"; +import { generateUrl } from '@nextcloud/router' import Vuex from 'vuex' -import axios from "@nextcloud/axios"; +import axios from '@nextcloud/axios' + +import { Tooltip } from '@nextcloud/vue' Vue.prototype.t = t Vue.prototype.n = n @@ -14,55 +17,57 @@ Vue.prototype.OCA = OCA Vue.use(Vuex) Vue.use(VueRouter) -import { Tooltip } from '@nextcloud/vue' - Vue.directive('tooltip', Tooltip) -const feedUrl = generateUrl("/apps/news/feeds") -const folderUrl = generateUrl("/apps/news/folders") +const feedUrl = generateUrl('/apps/news/feeds') +const folderUrl = generateUrl('/apps/news/folders') const routes = [ { name: 'explore', path: '#explore', - component: Explore + component: Explore, }, ] const router = new VueRouter({ mode: 'history', base: generateUrl('apps/news'), - routes -}); + routes, +}) const store = new Vuex.Store({ state: { folders: [], - feeds: [] + feeds: [], }, mutations: { addFolders(state, folders) { - folders.forEach(it => { + folders.forEach((it) => { it.feedCount = 0 state.folders.push(it) }) }, addFeeds(state, feeds) { - feeds.forEach(it => { + feeds.forEach((it) => { state.feeds.push(it) - const folder = state.folders.find(folder => folder.id === it.folderId) + const folder = state.folders.find( + (folder) => folder.id === it.folderId + ) folder.feeds.push(it) folder.feedCount += it.unreadCount }) - } + }, }, actions: { - addFolder({commit}, {folder}) { - axios.post(folderUrl, {folderName: folder.name}).then( - response => commit('addFolders', response.data.folders) - ); + addFolder({ commit }, { folder }) { + axios + .post(folderUrl, { folderName: folder.name }) + .then((response) => + commit('addFolders', response.data.folders) + ) }, - deleteFolder({commit}, {folder}) { + deleteFolder({ commit }, { folder }) { /** this.getByFolderId(folderId).forEach(function (feed) { promises.push(self.reversiblyDelete(feed.id, false, true)); @@ -72,22 +77,20 @@ const store = new Vuex.Store({ */ axios.delete(folderUrl + '/' + folder.id).then() }, - loadFolder({commit}) { - console.log('loading folders') - axios.get(folderUrl).then( - response => { - commit('addFolders', response.data.folders); - axios.get(feedUrl).then( - response => commit('addFeeds', response.data.feeds) + loadFolder({ commit }) { + axios.get(folderUrl).then((response) => { + |