From 881e17452f211eb84f384553ea52b0be2b791ca9 Mon Sep 17 00:00:00 2001 From: Burhan YILMAZ Date: Thu, 26 Dec 2024 01:07:15 +0300 Subject: [PATCH] fix: showing double loading indicator --- src/screens/Blog/HomeScreen.tsx | 28 +++++++++++++++++++++++++--- src/store/PostStore.ts | 18 +++++++++++++++++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/screens/Blog/HomeScreen.tsx b/src/screens/Blog/HomeScreen.tsx index 12692d6..bf6a5c6 100644 --- a/src/screens/Blog/HomeScreen.tsx +++ b/src/screens/Blog/HomeScreen.tsx @@ -9,7 +9,14 @@ import colors from '@theme/colors'; import { text } from '@theme/text'; import { observer } from 'mobx-react-lite'; import { useEffect } from 'react'; -import { ActivityIndicator, FlatList, ListRenderItem, Text, View } from 'react-native'; +import { + ActivityIndicator, + FlatList, + ListRenderItem, + RefreshControl, + Text, + View, +} from 'react-native'; const BlogHomeScreen = () => { const { navigate } = useNavigation>(); @@ -23,6 +30,19 @@ const BlogHomeScreen = () => { [], ); + const onEndReached = () => { + if (postStore.pullToRefresh) { + return; + } + + postStore.increasePage(); + }; + + const onRefresh = () => { + postStore.setPullToRefresh(true); + postStore.getPosts(); + }; + const RenderItem: ListRenderItem = ({ item: post }) => ( navigate('PostDetail', { post })} /> @@ -52,15 +72,17 @@ const BlogHomeScreen = () => { )} } + refreshControl={ + + } /> ); diff --git a/src/store/PostStore.ts b/src/store/PostStore.ts index 035dc25..72d06c3 100644 --- a/src/store/PostStore.ts +++ b/src/store/PostStore.ts @@ -1,6 +1,7 @@ import { api } from '@services/Api'; import { removeHtmlAndDecimalEntities } from '@utils/helpers'; import { ApiPostType } from '@utils/types/BlogTypes'; +import { when } from 'mobx'; import { Instance, flow, t } from 'mobx-state-tree'; export const Post = t @@ -53,6 +54,7 @@ const PostStore = t page: t.number, posts: t.map(Post), loading: t.optional(t.boolean, false), + pullToRefresh: t.optional(t.boolean, false), }) .views(self => ({ get listingPosts() { @@ -94,16 +96,30 @@ const PostStore = t self.loading = loading; }, + setPullToRefresh(pullToRefresh: boolean) { + self.pullToRefresh = pullToRefresh; + }, + async getPosts() { if (!self.url) { return; } - this.setLoading(true); try { + if (self.pullToRefresh) { + self.page = 1; + } const posts = await api.getPost(self.page); + if (self.pullToRefresh) { + this.clearAll(); + + setTimeout(() => { + this.setPullToRefresh(false); + }, 1000); + } + if (posts?.length > 0) { posts.forEach(this.addPost); }