diff options
-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.vue | 4 | ||||
-rw-r--r-- | src/components/routes/Starred.vue | 2 | ||||
-rw-r--r-- | src/components/routes/Unread.vue | 4 | ||||
-rw-r--r-- | src/store/item.ts | 20 | ||||
-rw-r--r-- | src/types/MutationTypes.ts | 1 | ||||
-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' |