summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDevlin Junker <devlin.junker@gmail.com>2023-09-14 16:50:04 -0700
committerBenjamin Brahmer <info@b-brahmer.de>2023-09-20 17:32:33 +0200
commitac33e7c13c752fdc671b98c652470d3f4b9e6d53 (patch)
tree3c301aa83f688e1863dd082f67285d14f5f89dbe /src
parent4b24d05ec2e58d06785650f527cf1aba74c4855c (diff)
remaining feed actions
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/components/Sidebar.vue12
-rw-r--r--src/components/SidebarFeedLinkActions.vue46
-rw-r--r--src/dataservices/feed.service.ts17
-rw-r--r--src/shims-vue.d.ts2
-rw-r--r--src/store/feed.ts21
-rw-r--r--src/types/Feed.ts3
-rw-r--r--src/types/MutationTypes.ts2
7 files changed, 77 insertions, 26 deletions
diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue
index 1835b395c..95cf27002 100644
--- a/src/components/Sidebar.vue
+++ b/src/components/Sidebar.vue
@@ -19,7 +19,7 @@
</template>
</NcAppNavigationNewItem>
- <NcAppNavigationItem :title="t('news', 'Unread articles')" icon="icon-rss" :to="{ name: ROUTES.UNREAD }">
+ <NcAppNavigationItem :name="t('news', 'Unread articles')" icon="icon-rss" :to="{ name: ROUTES.UNREAD }">
<template #actions>
<NcActionButton icon="icon-checkmark" @click="alert('TODO: Mark Read')">
t('news','Mark read')
@@ -32,7 +32,7 @@
<NcCounterBubble>{{ items.unreadCount }}</NcCounterBubble>
</template>
</NcAppNavigationItem>
- <NcAppNavigationItem :title="t('news', 'All articles')" icon="icon-rss" :to="{ name: ROUTES.ALL }">
+ <NcAppNavigationItem :name="t('news', 'All articles')" icon="icon-rss" :to="{ name: ROUTES.ALL }">
<template #actions>
<ActionButton icon="icon-checkmark" @click="alert('TODO: Edit')">
t('news','Mark read')
@@ -42,7 +42,7 @@
<RssIcon />
</template>
</NcAppNavigationItem>
- <NcAppNavigationItem :title="t('news', 'Starred')" icon="icon-starred" :to="{ name: ROUTES.STARRED }">
+ <NcAppNavigationItem :name="t('news', 'Starred')" icon="icon-starred" :to="{ name: ROUTES.STARRED }">
<template #counter>
<NcCounterBubble>{{ items.starredCount }}</NcCounterBubble>
</template>
@@ -50,14 +50,14 @@
<NcAppNavigationItem v-for="topLevelItem in topLevelNav"
:key="topLevelItem.name || topLevelItem.title"
- :title="topLevelItem.name || topLevelItem.title"
+ :name="topLevelItem.name || topLevelItem.title"
:icon="''"
:to="isFolder(topLevelItem) ? { name: ROUTES.FOLDER, params: { folderId: topLevelItem.id.toString() }} : { name: ROUTES.FEED, params: { feedId: topLevelItem.id.toString() } }"
:allow-collapse="true">
<template #default>
<NcAppNavigationItem v-for="feed in topLevelItem.feeds"
:key="feed.name"
- :title="feed.title"
+ :name="feed.title"
:icon="''"
:to="{ name: ROUTES.FEED, params: { feedId: feed.id } }">
<template #icon>
@@ -98,7 +98,7 @@
</template>
</NcAppNavigationItem>
- <NcAppNavigationItem :title="t('news', 'Explore')"
+ <NcAppNavigationItem :name="t('news', 'Explore')"
icon="true"
:to="{ name: ROUTES.EXPLORE }">
<template #counter>
diff --git a/src/components/SidebarFeedLinkActions.vue b/src/components/SidebarFeedLinkActions.vue
index ccb18165e..e9f8bd521 100644
--- a/src/components/SidebarFeedLinkActions.vue
+++ b/src/components/SidebarFeedLinkActions.vue
@@ -50,18 +50,21 @@
@click="setUpdateMode(FEED_UPDATE_MODE.UNREAD)">
{{ t("news", "Ignore updated") }}
</NcActionButton>
- <NcActionButton icon="icon-rss"
- @click="alert('TODO: Open Feed URL')">
- {{ t("news", "Open feed URL") }}
- </NcActionButton>
- <NcActionButton icon="icon-icon-rename"
- @click="alert('TODO: Rename')">
+ <NcActionButton icon="icon-rename"
+ @click="rename()">
{{ t("news", "Rename") }}
</NcActionButton>
<NcActionButton icon="icon-delete"
- @click="alert('TODO: Delete Feed')">
+ @click="deleteFeed()">
{{ t("news", "Delete") }}
</NcActionButton>
+ <NcAppNavigationItem :title="t('news', 'Open Feed URL')"
+ :href="feed.location">
+ <template #icon>
+ <RssIcon />
+ </template>
+ </NcAppNavigationItem>
+
</span>
</template>
@@ -71,20 +74,20 @@ import { mapState } from 'vuex'
import Vue from 'vue'
import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
+import NcAppNavigationItem from '@nextcloud/vue/dist/Components/NcAppNavigationItem.js'
import { FEED_ORDER, FEED_UPDATE_MODE } from '../dataservices/feed.service'
+import RssIcon from 'vue-material-design-icons/Rss.vue'
+
import { ACTIONS } from '../store'
import { Feed } from '../types/Feed'
-// import { Feed } from '../types/Feed'
-
-// TODO?
-const SidebarFeedLinkState = { }
-
export default Vue.extend({
components: {
NcActionButton,
+ NcAppNavigationItem,
+ RssIcon,
},
props: {
feedId: {
@@ -100,16 +103,12 @@ export default Vue.extend({
},
computed: {
- ...mapState(SidebarFeedLinkState),
feed(): Feed {
return this.$store.getters.feeds.find((feed: Feed) => {
return feed.id === this.feedId
})
},
},
- created() {
- // TODO: init?
- },
methods: {
alert(msg: string) {
window.alert(msg)
@@ -129,6 +128,21 @@ export default Vue.extend({
setUpdateMode(updateMode: FEED_UPDATE_MODE) {
this.$store.dispatch(ACTIONS.FEED_SET_UPDATE_MODE, { feed: this.feed, updateMode })
},
+ rename() {
+ const title = window.prompt(t('news', 'Rename Feed'), this.feed.title)
+
+ // null on escape
+ if (title !== null) {
+ this.$store.dispatch(ACTIONS.FEED_SET_TITLE, { feed: this.feed, title })
+ }
+ },
+ deleteFeed() {
+ const shouldDelete = window.confirm(t('news', 'Are you sure you want to delete?'))
+
+ if (shouldDelete) {
+ this.$store.dispatch(ACTIONS.FEED_DELETE, { feed: this.feed })
+ }
+ },
},
})
diff --git a/src/dataservices/feed.service.ts b/src/dataservices/feed.service.ts
index f28320d55..0871fb7f3 100644
--- a/src/dataservices/feed.service.ts
+++ b/src/dataservices/feed.service.ts
@@ -65,20 +65,33 @@ export class FeedService {
* Update a feeds properties
*
* @param param0
- * @param param0.feedId {Number} ID number of feed to mark items as read
+ * @param param0.feedId {Number} ID number of feed to update
* @param param0.pinned {Boolean} should be pinned (true) or not pinned (flse)
* @param param0.ordering {FEED_ORDER} sets feed order (0 = NEWEST, 1 = OLDEST, 2 = DEFAULT)
* @param param0.fullTextEnabled {Boolean} should be full text be enabled (true) or not (flse)
* @param param0.updateMode {FEED_UPDATE_MODE} sets updateMode (0 = UNREAD, 1 = IGNORE)
+ * @param param0.title {String} title of feed to display
* @return {AxiosResponse} Null value is returned on success
*/
- static updateFeed({ feedId, pinned, ordering, fullTextEnabled, updateMode }: { feedId: number, pinned?: boolean, ordering?: FEED_ORDER, fullTextEnabled?: boolean, updateMode?: FEED_UPDATE_MODE }): Promise<AxiosResponse> {
+ static updateFeed({ feedId, pinned, ordering, fullTextEnabled, updateMode, title }: { feedId: number, pinned?: boolean, ordering?: FEED_ORDER, fullTextEnabled?: boolean, updateMode?: FEED_UPDATE_MODE, title?: string }): Promise<AxiosResponse> {
return axios.patch(API_ROUTES.FEED + `/${feedId}`, {
pinned,
ordering,
fullTextEnabled,
updateMode,
+ title,
})
}
+ /**
+ * Deletes a feed
+ *
+ * @param param0
+ * @param param0.feedId {Number} ID number of feed to delete
+ * @return {AxiosResponse} Null value is returned on success
+ */
+ static deleteFeed({ feedId }: { feedId: number }): Promise<AxiosResponse> {
+ return axios.delete(API_ROUTES.FEED + `/${feedId}`)
+ }
+
}
diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts
index 6ea357570..e22ed2261 100644
--- a/src/shims-vue.d.ts
+++ b/src/shims-vue.d.ts
@@ -12,4 +12,4 @@ declare module '@nextcloud/vue/dist/Components/*' {
};
// Necessary to access translate in typescript components
-function t(app, key) { } \ No newline at end of file
+function t(app, key): string { } \ No newline at end of file
diff --git a/src/store/feed.ts b/src/store/feed.ts
index b6031e4e6..d4bdd6bcc 100644
--- a/src/store/feed.ts
+++ b/src/store/feed.ts
@@ -11,10 +11,14 @@ export const FEED_ACTION_TYPES = {
ADD_FEED: 'ADD_FEED',
FETCH_FEEDS: 'FETCH_FEEDS',
FEED_MARK_READ: 'FEED_MARK_READ',
+
FEED_SET_PINNED: 'FEED_SET_PINNED',
FEED_SET_ORDERING: 'FEED_SET_ORDERING',
FEED_SET_FULL_TEXT: 'FEED_SET_FULL_TEXT',
FEED_SET_UPDATE_MODE: 'FEED_SET_UPDATE_MODE',
+ FEED_SET_TITLE: 'FEED_SET_TITLE',
+
+ FEED_DELETE: 'FEED_DELETE',
}
const state = {
@@ -108,6 +112,18 @@ export const actions = {
commit(FEED_MUTATION_TYPES.UPDATE_FEED, { id: feed.id, updateMode })
},
+
+ async [FEED_ACTION_TYPES.FEED_SET_TITLE]({ commit }: ActionParams, { feed, title }: { feed: Feed, title: string }) {
+ await FeedService.updateFeed({ feedId: feed.id as number, title })
+
+ commit(FEED_MUTATION_TYPES.UPDATE_FEED, { id: feed.id, title })
+ },
+
+ async [FEED_ACTION_TYPES.FEED_DELETE]({ commit }: ActionParams, { feed }: { feed: Feed }) {
+ await FeedService.deleteFeed({ feedId: feed.id as number })
+
+ commit(FEED_MUTATION_TYPES.FEED_DELETE, feed.id)
+ },
}
export const mutations = {
@@ -151,6 +167,11 @@ export const mutations = {
_.assign(feed, { unreadCount: feed.unreadCount - 1 })
}
},
+ [FEED_MUTATION_TYPES.FEED_DELETE](state: AppState, feedId: number) {
+ state.feeds = state.feeds.filter((feed: Feed) => {
+ return feed.id !== feedId
+ })
+ },
}
export default {
diff --git a/src/types/Feed.ts b/src/types/Feed.ts
index f9544c2b0..5a7ff98f4 100644
--- a/src/types/Feed.ts
+++ b/src/types/Feed.ts
@@ -11,5 +11,6 @@ export type Feed = {
pinned: boolean;
ordering: FEED_ORDER;
fullTextEnabled: boolean;
- updateMode: FEED_UPDATE_MODE
+ updateMode: FEED_UPDATE_MODE;
+ location: string;
}
diff --git a/src/types/MutationTypes.ts b/src/types/MutationTypes.ts
index 9947b7d11..dba5a7274 100644
--- a/src/types/MutationTypes.ts
+++ b/src/types/MutationTypes.ts
@@ -6,6 +6,8 @@ export const FEED_MUTATION_TYPES = {
SET_FEED_ALL_READ: 'SET_FEED_ALL_READ',
INCREASE_FEED_UNREAD_COUNT: 'INCREASE_FEED_UNREAD_COUNT',
DECREASE_FEED_UNREAD_COUNT: 'DECREASE_FEED_UNREAD_COUNT',
+
+ FEED_DELETE: 'FEED_DELETE',
}
export const FOLDER_MUTATION_TYPES = {