Skip to content

Commit

Permalink
feat(feeds): implement useFeed().reset()
Browse files Browse the repository at this point in the history
  • Loading branch information
estebanabaroa committed Jan 29, 2024
1 parent 99b74b3 commit 773df5a
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/hooks/feeds/feeds.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,18 @@ describe('feeds', () => {
expect(Object.keys(feedsStore.getState().feedsOptions).length).toBe(2)
})

test('reset feed', async () => {
rendered.rerender({subplebbitAddresses: ['subplebbit address 1']})
await waitFor(() => rendered.result.current.feed?.length === postsPerPage)
expect(rendered.result.current.feed.length).toBe(postsPerPage)
await scrollOnePage()
expect(rendered.result.current.feed.length).toBe(postsPerPage * 2)

await rendered.result.current.reset()
await waitFor(() => rendered.result.current.feed?.length === postsPerPage)
expect(rendered.result.current.feed.length).toBe(postsPerPage)
})

test('get feed page 1 and 2 with multiple subplebbits sorted by topAll', async () => {
// use buffered feeds to be able to wait until the buffered feeds have updated before loading page 2
rendered = renderHook<any, any>((props: any) => {
Expand Down
15 changes: 15 additions & 0 deletions src/hooks/feeds/feeds.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export function useFeed(options?: UseFeedOptions): UseFeedResult {
const account = useAccount({accountName})
const addFeedToStore = useFeedsStore((state) => state.addFeedToStore)
const incrementFeedPageNumber = useFeedsStore((state) => state.incrementFeedPageNumber)
const resetFeed = useFeedsStore((state) => state.resetFeed)
const uniqueSubplebbitAddresses = useUniqueSorted(subplebbitAddresses)
const feedName = useFeedName(account?.id, sortType, uniqueSubplebbitAddresses, postsPerPage, filter, newerThan)
const [errors, setErrors] = useState<Error[]>([])
Expand Down Expand Up @@ -62,6 +63,19 @@ export function useFeed(options?: UseFeedOptions): UseFeedResult {
}
}

const reset = async () => {
try {
if (!uniqueSubplebbitAddresses || !account) {
throw Error('useFeed cannot reset feed not initalized yet')
}
resetFeed(feedName)
} catch (e: any) {
// wait 100 ms so infinite scroll doesn't spam this function
await new Promise((r) => setTimeout(r, 50))
setErrors([...errors, e])
}
}

if (account && subplebbitAddresses?.length) {
log('useFeed', {
feedLength: feed?.length || 0,
Expand All @@ -81,6 +95,7 @@ export function useFeed(options?: UseFeedOptions): UseFeedResult {
feed: feed || [],
hasMore,
loadMore,
reset,
state,
error: errors[errors.length - 1],
errors,
Expand Down
18 changes: 18 additions & 0 deletions src/stores/feeds/feeds-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export type FeedsState = {
feedsHaveMore: {[feedName: string]: boolean}
addFeedToStore: Function
incrementFeedPageNumber: Function
resetFeed: Function
updateFeeds: Function
}

Expand Down Expand Up @@ -148,6 +149,23 @@ const feedsStore = createStore<FeedsState>((setState: Function, getState: Functi
updateFeeds()
},

resetFeed(feedName: string) {
const {feedsOptions, updateFeeds} = getState()
assert(feedsOptions[feedName], `feedsActions.resetFeed feed name '${feedName}' does not exist in feeds store`)
assert(feedsOptions[feedName].pageNumber >= 1, `feedsActions.resetFeed cannot reset feed page number '${feedsOptions[feedName].pageNumber}' lower than 1`)
log('feedsActions.resetFeed', {feedName})

setState(({feedsOptions, loadedFeeds}: any) => {
const feedOptions = {
...feedsOptions[feedName],
pageNumber: 1,
}
return {feedsOptions: {...feedsOptions, [feedName]: feedOptions}, loadedFeeds: {...loadedFeeds, [feedName]: []}}
})

updateFeeds()
},

// recalculate all feeds using new subplebbits.post.pages, subplebbitsPagesStore and page numbers
updateFeeds() {
if (updateFeedsPending) {
Expand Down
2 changes: 2 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ export interface UseFeedResult extends Result {
feed: Comment[]
hasMore: boolean
loadMore(): Promise<void>
// subplebbitAddressesWithNewerPosts: string[]
reset(): Promise<void>
}

// useBufferedFeeds(options): result
Expand Down

0 comments on commit 773df5a

Please sign in to comment.