diff options
author | Devlin Junker <devlin.junker@gmail.com> | 2023-09-14 13:14:13 -0700 |
---|---|---|
committer | Benjamin Brahmer <info@b-brahmer.de> | 2023-09-20 17:32:33 +0200 |
commit | 9d629b943a683b307c3cfe755792f9a544caca98 (patch) | |
tree | 60a3e289f4f45cc0d9f62e93d452ec5b1918a966 /src | |
parent | fe034782f73bf9ad25881e3b2c61353664f49973 (diff) |
adding pinned feeds
Signed-off-by: Devlin Junker <devlin.junker@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/components/Sidebar.vue | 60 | ||||
-rw-r--r-- | src/components/SidebarFeedLinkActions.vue | 20 | ||||
-rw-r--r-- | src/dataservices/feed.service.ts | 14 | ||||
-rw-r--r-- | src/store/feed.ts | 7 | ||||
-rw-r--r-- | src/types/Feed.ts | 1 |
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; } |