summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDevlin Junker <devlin.junker@gmail.com>2023-09-14 13:14:13 -0700
committerBenjamin Brahmer <info@b-brahmer.de>2023-09-20 17:32:33 +0200
commit9d629b943a683b307c3cfe755792f9a544caca98 (patch)
tree60a3e289f4f45cc0d9f62e93d452ec5b1918a966 /src
parentfe034782f73bf9ad25881e3b2c61353664f49973 (diff)
adding pinned feeds
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/components/Sidebar.vue60
-rw-r--r--src/components/SidebarFeedLinkActions.vue20
-rw-r--r--src/dataservices/feed.service.ts14
-rw-r--r--src/store/feed.ts7
-rw-r--r--src/types/Feed.ts1
5 files changed, 47 insertions, 55 deletions
diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue
index 411b92cb0..1835b395c 100644
--- a/src/components/Sidebar.vue
+++ b/src/components/Sidebar.vue
@@ -66,54 +66,7 @@
</template>
<template #actions>
- <NcActionButton icon="icon-checkmark"
- @click="alert('TODO: Mark read')">
- {{ t("news", "Mark read") }}
- </NcActionButton>
- <NcActionButton icon="icon-pinned"
- @click="alert('TODO: Unpin from top')">
- {{ t("news", "Unpin from top") }}
- </NcActionButton>
- <NcActionButton icon="icon-caret-dark"
- @click="alert('TODO: Newest First')">
- {{ t("news", "Newest first") }}
- </NcActionButton>
- <NcActionButton icon="icon-caret-dark"
- @click="alert('TODO: Oldest first')">
- {{ t("news", "Oldest first") }}
- </NcActionButton>
- <NcActionButton icon="icon-caret-dark"
- @click="alert('TODO: Default Order')">
- {{ t("news", "Default order") }}
- </NcActionButton>
- <NcActionButton icon="icon-full-text-disabled"
- @click="alert('TODO: Enable Full Text')">
- {{ t("news", "Enable full text") }}
- </NcActionButton>
- <NcActionButton icon="icon-full-text-enabled"
- @click="alert('TODO: DIsable Full Text')">
- {{ t("news", "Disable full text") }}
- </NcActionButton>
- <NcActionButton icon="icon-updatemode-default"
- @click="alert('TODO: Unread Updated')">
- {{ t("news", "Unread updated") }}
- </NcActionButton>
- <NcActionButton icon="icon-updatemode-unread"
- @click="alert('TOODO: Ignore UPdated')">
- {{ t("news", "Ignore updated") }}
- </NcActionButton>
- <NcActionButton icon="icon-icon-rss"
- @click="alert('TODO: Open Feed URL')">
- {{ t("news", "Open feed URL") }}
- </NcActionButton>
- <NcActionButton icon="icon-icon-rename"
- @click="alert('TODO: Rename')">
- {{ t("news", "Rename") }}
- </NcActionButton>
- <NcActionButton icon="icon-delete"
- @click="alert('TODO: Delete Feed')">
- {{ t("news", "Delete") }}
- </NcActionButton>
+ <SidebarFeedLinkActions :feed-id="feed.id" />
</template>
</NcAppNavigationItem>
</template>
@@ -131,7 +84,7 @@
</NcCounterBubble>
</template>
<template #actions>
- <SidebarFeedLinkActions v-if="topLevelItem.name === undefined" :feed="topLevelItem" />
+ <SidebarFeedLinkActions v-if="topLevelItem.name === undefined" :feed-id="topLevelItem.id" />
<NcActionButton v-if="topLevelItem.name !== undefined" icon="icon-checkmark" @click="alert('TODO: Mark read')">
{{ t("news", "Mark read") }}
@@ -195,7 +148,14 @@ const SideBarState = {
})
navItems = navItems.concat(state.folders)
- return navItems
+ return navItems.sort((item, item2) => {
+ if ((item as Feed).pinned && !(item2 as Feed).pinned) {
+ return -1
+ } else if ((item2 as Feed).pinned && !(item as Feed).pinned) {
+ return 1
+ }
+ return 0
+ })
},
}
diff --git a/src/components/SidebarFeedLinkActions.vue b/src/components/SidebarFeedLinkActions.vue
index 759e0655a..639bd9954 100644
--- a/src/components/SidebarFeedLinkActions.vue
+++ b/src/components/SidebarFeedLinkActions.vue
@@ -1,17 +1,18 @@
<template>
<span>
- <NcActionButton icon="icon-checkmark"
+ <NcActionButton v-if="feed.unreadCount > 0"
+ icon="icon-checkmark"
@click="markRead">
{{ t("news", "Mark read") }}
</NcActionButton>
<NcActionButton v-if="feed.pinned"
icon="icon-pinned"
- @click="alert('TODO: Unpin from top')">
+ @click="setPinned(false)">
{{ t("news", "Unpin from top") }}
</NcActionButton>
<NcActionButton v-if="!feed.pinned"
icon="icon-pinned"
- @click="alert('TODO: Pin to top')">
+ @click="setPinned(true)">
{{ t("news", "Pin to top") }}
</NcActionButton>
<NcActionButton v-if="feed.ordering === FEED_ORDER.NEWEST"
@@ -74,6 +75,7 @@ import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
import { FEED_ORDER, FEED_UPDATE_MODE } from '../dataservices/feed.service'
import { ACTIONS } from '../store'
+import { Feed } from '../types/Feed'
// import { Feed } from '../types/Feed'
@@ -85,8 +87,8 @@ export default Vue.extend({
NcActionButton,
},
props: {
- feed: {
- type: Object,
+ feedId: {
+ type: Number,
required: true,
},
},
@@ -99,6 +101,11 @@ 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?
@@ -110,6 +117,9 @@ export default Vue.extend({
markRead() {
this.$store.dispatch(ACTIONS.FEED_MARK_READ, { feed: this.feed })
},
+ setPinned(pinned: boolean) {
+ this.$store.dispatch(ACTIONS.FEED_SET_PINNED, { feed: this.feed, pinned })
+ },
},
})
diff --git a/src/dataservices/feed.service.ts b/src/dataservices/feed.service.ts
index aa8dc215c..8b2d2e7c9 100644
--- a/src/dataservices/feed.service.ts
+++ b/src/dataservices/feed.service.ts
@@ -61,4 +61,18 @@ export class FeedService {
})
}
+ /**
+ * Update a feeds properties
+ *
+ * @param param0
+ * @param param0.feedId {Number} ID number of feed to mark items as read
+ * @param param0.pinned {Boolean} should be pinned (true) or not pinned (flse)
+ * @return {AxiosResponse} Updated feed info based on parameters provided
+ */
+ static updateFeed({ feedId, pinned }: { feedId: number, pinned?: boolean }): Promise<AxiosResponse> {
+ return axios.patch(API_ROUTES.FEED + `/${feedId}`, {
+ pinned,
+ })
+ }
+
}
diff --git a/src/store/feed.ts b/src/store/feed.ts
index 08f834cf2..adbc9eabf 100644
--- a/src/store/feed.ts
+++ b/src/store/feed.ts
@@ -11,6 +11,7 @@ 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',
}
const state = {
@@ -79,6 +80,12 @@ export const actions = {
commit(FEED_MUTATION_TYPES.SET_FEED_ALL_READ, feed.id)
},
+
+ async [FEED_ACTION_TYPES.FEED_SET_PINNED]({ commit }: ActionParams, { feed, pinned }: { feed: Feed, pinned: boolean }) {
+ await FeedService.updateFeed({ feedId: feed.id as number, pinned })
+
+ commit(FEED_MUTATION_TYPES.UPDATE_FEED, { id: feed.id, pinned })
+ },
}
export const mutations = {
diff --git a/src/types/Feed.ts b/src/types/Feed.ts
index 87de97965..d7221c452 100644
--- a/src/types/Feed.ts
+++ b/src/types/Feed.ts
@@ -6,4 +6,5 @@ export type Feed = {
autoDiscover?: boolean;
faviconLink?: string;
id?: number;
+ pinned: boolean;
}