summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/components/feed-display/FeedItemDisplay.vue (renamed from src/components/FeedItemDisplay.vue)6
-rw-r--r--src/components/feed-display/FeedItemDisplayList.vue (renamed from src/components/FeedItemDisplayList.vue)2
-rw-r--r--src/components/feed-display/FeedItemRow.vue (renamed from src/components/FeedItemRow.vue)6
-rw-r--r--src/components/feed-display/ItemSkeleton.vue (renamed from src/components/ItemSkeleton.vue)0
-rw-r--r--src/components/feed-display/VirtualScroll.vue (renamed from src/components/VirtualScroll.vue)0
-rw-r--r--src/components/routes/Feed.vue4
-rw-r--r--src/components/routes/Starred.vue2
-rw-r--r--src/components/routes/Unread.vue4
-rw-r--r--src/store/item.ts20
-rw-r--r--src/types/MutationTypes.ts1
-rw-r--r--tests/javascript/unit/components/feed-display/FeedItemDisplay.spec.ts (renamed from tests/javascript/unit/components/FeedItemDisplay.spec.ts)4
-rw-r--r--tests/javascript/unit/components/feed-display/FeedItemDisplayList.spec.ts (renamed from tests/javascript/unit/components/FeedItemDisplayList.spec.ts)6
-rw-r--r--tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts (renamed from tests/javascript/unit/components/FeedItemRow.spec.ts)4
13 files changed, 35 insertions, 24 deletions
diff --git a/src/components/FeedItemDisplay.vue b/src/components/feed-display/FeedItemDisplay.vue
index 1d7d5a843..4eab900ab 100644
--- a/src/components/FeedItemDisplay.vue
+++ b/src/components/feed-display/FeedItemDisplay.vue
@@ -101,9 +101,9 @@ import CloseIcon from 'vue-material-design-icons/Close.vue'
import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
-import { Feed } from '../types/Feed'
-import { FeedItem } from '../types/FeedItem'
-import { ACTIONS, MUTATIONS } from '../store'
+import { Feed } from '../../types/Feed'
+import { FeedItem } from '../../types/FeedItem'
+import { ACTIONS, MUTATIONS } from '../../store'
export default Vue.extend({
name: 'FeedItemDisplay',
diff --git a/src/components/FeedItemDisplayList.vue b/src/components/feed-display/FeedItemDisplayList.vue
index f7ba8d3ab..8fce1fb25 100644
--- a/src/components/FeedItemDisplayList.vue
+++ b/src/components/feed-display/FeedItemDisplayList.vue
@@ -60,7 +60,7 @@ import VirtualScroll from './VirtualScroll.vue'
import FeedItemRow from './FeedItemRow.vue'
import FeedItemDisplay from './FeedItemDisplay.vue'
-import { FeedItem } from '../types/FeedItem'
+import { FeedItem } from '../../types/FeedItem'
const DEFAULT_DISPLAY_LIST_CONFIG = {
starFilter: true,
diff --git a/src/components/FeedItemRow.vue b/src/components/feed-display/FeedItemRow.vue
index 6d436ba01..03670295a 100644
--- a/src/components/FeedItemRow.vue
+++ b/src/components/feed-display/FeedItemRow.vue
@@ -60,9 +60,9 @@ import ShareVariant from 'vue-material-design-icons/ShareVariant.vue'
import NcActions from '@nextcloud/vue/dist/Components/NcActions.js'
import NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'
-import { Feed } from '../types/Feed'
-import { FeedItem } from '../types/FeedItem'
-import { ACTIONS, MUTATIONS } from '../store'
+import { Feed } from '../../types/Feed'
+import { FeedItem } from '../../types/FeedItem'
+import { ACTIONS, MUTATIONS } from '../../store'
export default Vue.extend({
name: 'FeedItemRow',
diff --git a/src/components/ItemSkeleton.vue b/src/components/feed-display/ItemSkeleton.vue
index 8762df971..8762df971 100644
--- a/src/components/ItemSkeleton.vue
+++ b/src/components/feed-display/ItemSkeleton.vue
diff --git a/src/components/VirtualScroll.vue b/src/components/feed-display/VirtualScroll.vue
index c6bb471bd..c6bb471bd 100644
--- a/src/components/VirtualScroll.vue
+++ b/src/components/feed-display/VirtualScroll.vue
diff --git a/src/components/routes/Feed.vue b/src/components/routes/Feed.vue
index 6f8f9c922..31194eb09 100644
--- a/src/components/routes/Feed.vue
+++ b/src/components/routes/Feed.vue
@@ -17,7 +17,7 @@ import { mapState } from 'vuex'
import NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'
-import FeedItemDisplayList from '../FeedItemDisplayList.vue'
+import FeedItemDisplayList from '../feed-display/FeedItemDisplayList.vue'
import { FeedItem } from '../../types/FeedItem'
import { ACTIONS, MUTATIONS } from '../../store'
@@ -56,7 +56,7 @@ export default Vue.extend({
methods: {
async fetchMore() {
if (!this.$store.state.items.fetchingItems['feed-' + this.feedId]) {
- this.$store.dispatch(ACTIONS.FETCH_FEED_ITEMS, { feedId: this.id, start: this.items && this.items.length > 0 ? this.items[this.items.length - 1].id : 0 })
+ this.$store.dispatch(ACTIONS.FETCH_FEED_ITEMS, { feedId: this.id })
}
},
},
diff --git a/src/components/routes/Starred.vue b/src/components/routes/Starred.vue
index d3df5a89f..243d42c5d 100644
--- a/src/components/routes/Starred.vue
+++ b/src/components/routes/Starred.vue
@@ -20,7 +20,7 @@ import { mapState } from 'vuex'
import NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'
-import FeedItemDisplayList from '../FeedItemDisplayList.vue'
+import FeedItemDisplayList from '../feed-display/FeedItemDisplayList.vue'
import { FeedItem } from '../../types/FeedItem'
import { ACTIONS, MUTATIONS } from '../../store'
diff --git a/src/components/routes/Unread.vue b/src/components/routes/Unread.vue
index 230a8ea04..b7199ea35 100644
--- a/src/components/routes/Unread.vue
+++ b/src/components/routes/Unread.vue
@@ -21,7 +21,7 @@ import { mapState } from 'vuex'
import NcCounterBubble from '@nextcloud/vue/dist/Components/NcCounterBubble.js'
-import FeedItemDisplayList from '../FeedItemDisplayList.vue'
+import FeedItemDisplayList from '../feed-display/FeedItemDisplayList.vue'
import { FeedItem } from '../../types/FeedItem'
import { ACTIONS, MUTATIONS } from '../../store'
@@ -68,7 +68,7 @@ export default Vue.extend({
},
async fetchMore() {
if (this.unreadCache && !this.$store.state.items.fetchingItems.unread) {
- this.$store.dispatch(ACTIONS.FETCH_UNREAD, { start: this.unreadCache[this.unreadCache?.length - 1]?.id })
+ this.$store.dispatch(ACTIONS.FETCH_UNREAD)
}
},
},
diff --git a/src/store/item.ts b/src/store/item.ts
index f409305f1..3b7bf0726 100644
--- a/src/store/item.ts
+++ b/src/store/item.ts
@@ -17,7 +17,7 @@ export const FEED_ITEM_ACTION_TYPES = {
export type ItemState = {
fetchingItems: { [key: string]: boolean };
allItemsLoaded: { [key: string]: boolean };
- starredLoaded: boolean;
+ lastItemLoaded: { [key: string]: number };
starredCount: number;
unreadCount: number;
@@ -30,7 +30,7 @@ export type ItemState = {
const state: ItemState = {
fetchingItems: {},
allItemsLoaded: {},
- starredLoaded: false,
+ lastItemLoaded: {},
starredCount: 0,
unreadCount: 0,
@@ -55,18 +55,21 @@ export const actions = {
async [FEED_ITEM_ACTION_TYPES.FETCH_UNREAD]({ commit }: ActionParams, { start }: { start: number } = { start: 0 }) {
commit(FEED_ITEM_MUTATION_TYPES.SET_FETCHING, { key: 'unread', fetching: true })
- const response = await ItemService.debounceFetchUnread(start)
+ const response = await ItemService.debounceFetchUnread(state.lastItemLoaded.unread || start)
commit(FEED_ITEM_MUTATION_TYPES.SET_ITEMS, response?.data.items)
if (response?.data.items.length < 40) {
commit(FEED_ITEM_MUTATION_TYPES.SET_ALL_LOADED, { key: 'unread', loaded: true })
}
+
+ const lastItem = response?.data.items[response?.data.items.length - 1].id
+ commit(FEED_ITEM_MUTATION_TYPES.SET_LAST_ITEM_LOADED, { key: 'unread', lastItem })
commit(FEED_ITEM_MUTATION_TYPES.SET_FETCHING, { key: 'unread', fetching: false })
},
async [FEED_ITEM_ACTION_TYPES.FETCH_STARRED]({ commit }: ActionParams, { start }: { start: number } = { start: 0 }) {
commit(FEED_ITEM_MUTATION_TYPES.SET_FETCHING, { key: 'starred', fetching: true })
- const response = await ItemService.debounceFetchStarred(start)
+ const response = await ItemService.debounceFetchStarred(state.lastItemLoaded.starred || start)
commit(FEED_ITEM_MUTATION_TYPES.SET_ITEMS, response?.data.items)
if (response?.data.starred) {
@@ -76,16 +79,20 @@ export const actions = {
if (response?.data.items.length < 40) {
commit(FEED_ITEM_MUTATION_TYPES.SET_ALL_LOADED, { key: 'starred', loaded: true })
}
+ const lastItem = response?.data.items[response?.data.items.length - 1].id
+ commit(FEED_ITEM_MUTATION_TYPES.SET_LAST_ITEM_LOADED, { key: 'starred', lastItem })
commit(FEED_ITEM_MUTATION_TYPES.SET_FETCHING, { key: 'starred', fetching: false })
},
async [FEED_ITEM_ACTION_TYPES.FETCH_FEED_ITEMS]({ commit }: ActionParams, { feedId, start }: { feedId: number; start: number }) {
commit(FEED_ITEM_MUTATION_TYPES.SET_FETCHING, { key: 'feed-' + feedId, fetching: true })
- const response = await ItemService.debounceFetchFeedItems(feedId, start)
+ const response = await ItemService.debounceFetchFeedItems(feedId, state.lastItemLoaded['feed-' + feedId] || start)
commit(FEED_ITEM_MUTATION_TYPES.SET_ITEMS, response?.data.items)
if (response?.data.items.length < 40) {
commit(FEED_ITEM_MUTATION_TYPES.SET_ALL_LOADED, { key: 'feed-' + feedId, loaded: true })
}
+ const lastItem = response?.data.items[response?.data.items.length - 1].id
+ commit(FEED_ITEM_MUTATION_TYPES.SET_LAST_ITEM_LOADED, { key: 'feed-' + feedId, lastItem })
commit(FEED_ITEM_MUTATION_TYPES.SET_FETCHING, { key: 'feed-' + feedId, fetching: false })
},
[FEED_ITEM_ACTION_TYPES.MARK_READ]({ commit }: ActionParams, { item }: { item: FeedItem}) {
@@ -151,6 +158,9 @@ export const mutations = {
[FEED_ITEM_MUTATION_TYPES.SET_ALL_LOADED](state: ItemState, { loaded, key }: { loaded: boolean; key: string; }) {
state.allItemsLoaded[key] = loaded
},
+ [FEED_ITEM_MUTATION_TYPES.SET_LAST_ITEM_LOADED](state: ItemState, { lastItem, key }: { lastItem: number; key: string; }) {
+ state.lastItemLoaded[key] = lastItem
+ },
}
export default {
diff --git a/src/types/MutationTypes.ts b/src/types/MutationTypes.ts
index 9d725c0c3..859c47f04 100644
--- a/src/types/MutationTypes.ts
+++ b/src/types/MutationTypes.ts
@@ -18,4 +18,5 @@ export const FEED_ITEM_MUTATION_TYPES = {
SET_FETCHING: 'SET_FETCHING',
SET_ALL_LOADED: 'SET_ALL_LOADED',
+ SET_LAST_ITEM_LOADED: 'SET_LAST_ITEM_LOADED',
}
diff --git a/tests/javascript/unit/components/FeedItemDisplay.spec.ts b/tests/javascript/unit/components/feed-display/FeedItemDisplay.spec.ts
index 594ccf9c1..a75119414 100644
--- a/tests/javascript/unit/components/FeedItemDisplay.spec.ts
+++ b/tests/javascript/unit/components/feed-display/FeedItemDisplay.spec.ts
@@ -1,7 +1,7 @@
import { shallowMount, createLocalVue, Wrapper } from '@vue/test-utils'
-import FeedItemDisplay from '../../../../src/components/FeedItemDisplay.vue'
-import { ACTIONS, MUTATIONS } from '../../../../src/store'
+import FeedItemDisplay from '../../../../../src/components/feed-display/FeedItemDisplay.vue'
+import { ACTIONS, MUTATIONS } from '../../../../../src/store'
describe('FeedItemDisplay.vue', () => {
'use strict'
diff --git a/tests/javascript/unit/components/FeedItemDisplayList.spec.ts b/tests/javascript/unit/components/feed-display/FeedItemDisplayList.spec.ts
index 2b1d7e455..cd11b7ea9 100644
--- a/tests/javascript/unit/components/FeedItemDisplayList.spec.ts
+++ b/tests/javascript/unit/components/feed-display/FeedItemDisplayList.spec.ts
@@ -1,9 +1,9 @@
import Vuex, { Store } from 'vuex'
import { shallowMount, createLocalVue, Wrapper } from '@vue/test-utils'
-import FeedItemDisplayList from '../../../../src/components/FeedItemDisplayList.vue'
-import VirtualScroll from '../../../../src/components/VirtualScroll.vue'
-import FeedItemRow from '../../../../src/components/FeedItemRow.vue'
+import FeedItemDisplayList from '../../../../../src/components/feed-display/FeedItemDisplayList.vue'
+import VirtualScroll from '../../../../../src/components/feed-display/VirtualScroll.vue'
+import FeedItemRow from '../../../../../src/components/feed-display/FeedItemRow.vue'
jest.mock('@nextcloud/axios')
diff --git a/tests/javascript/unit/components/FeedItemRow.spec.ts b/tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts
index dde0106a9..d6aa2cd9d 100644
--- a/tests/javascript/unit/components/FeedItemRow.spec.ts
+++ b/tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts
@@ -1,7 +1,7 @@
import { shallowMount, createLocalVue, Wrapper } from '@vue/test-utils'
-import FeedItemRow from '../../../../src/components/FeedItemRow.vue'
-import { ACTIONS } from '../../../../src/store'
+import FeedItemRow from '../../../../../src/components/feed-display/FeedItemRow.vue'
+import { ACTIONS } from '../../../../../src/store'
describe('FeedItemRow.vue', () => {
'use strict'