aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2020-08-09 21:17:33 +0300
committereug-vs <eug-vs@keemail.me>2020-08-09 21:17:33 +0300
commit359ec6a68ea92b3d1eecf020742157eb3be90b9f (patch)
tree33c177844a2c7924de8b0872d1558e7a24e5edab
parent992b12d3bab79e749bc25eb5a17981853ff3c216 (diff)
downloadwhich-ui-359ec6a68ea92b3d1eecf020742157eb3be90b9f.tar.gz
feat: add useFeed hook
-rw-r--r--src/hooks/APIClient.ts10
-rw-r--r--src/pages/FeedPage/FeedPage.tsx18
-rw-r--r--src/pages/ProfilePage/ProfilePage.tsx6
3 files changed, 15 insertions, 19 deletions
diff --git a/src/hooks/APIClient.ts b/src/hooks/APIClient.ts
index fa23a21..ce11134 100644
--- a/src/hooks/APIClient.ts
+++ b/src/hooks/APIClient.ts
@@ -4,6 +4,10 @@ import { get } from '../requests';
const fetcher = (endpoint: string) => get(endpoint).then(response => response.data);
+const arrayOptions = {
+ initialData: [],
+ revalidateOnMount: true
+};
export const useUser = (username: string) => {
return useSWR(
@@ -13,5 +17,9 @@ export const useUser = (username: string) => {
};
export const useProfile = (id: string) => {
- return useSWR(id && `/profiles/${id}`, fetcher, { initialData: [] });
+ return useSWR(id && `/profiles/${id}`, fetcher, arrayOptions);
+};
+
+export const useFeed = () => {
+ return useSWR(`/feed`, fetcher, arrayOptions);
};
diff --git a/src/pages/FeedPage/FeedPage.tsx b/src/pages/FeedPage/FeedPage.tsx
index 0b7d44a..8e7fb55 100644
--- a/src/pages/FeedPage/FeedPage.tsx
+++ b/src/pages/FeedPage/FeedPage.tsx
@@ -1,32 +1,24 @@
-import React, { useState, useEffect } from 'react';
+import React from 'react';
import { Poll } from 'which-types';
import { Container } from '@material-ui/core/';
import Feed from '../../components/Feed/Feed';
-import { get } from '../../requests';
import PollSubmission from './PollSubmission';
import { useAuth } from '../../hooks/useAuth';
+import { useFeed } from '../../hooks/APIClient';
const FeedPage: React.FC = () => {
- const [polls, setPolls] = useState<Poll[]>([]);
+ const { data, mutate } = useFeed();
const { isAuthenticated } = useAuth();
- useEffect(() => {
- get('/feed').then(response => {
- setPolls(response.data);
- });
- }, []);
-
const addPoll = (poll: Poll): void => {
- polls.unshift(poll);
- setPolls([]);
- setPolls(polls);
+ mutate([poll, ...data], true);
};
return (
<Container maxWidth="sm" disableGutters>
{isAuthenticated() && <PollSubmission addPoll={addPoll} />}
- <Feed polls={polls} />
+ <Feed polls={data} />
</Container>
);
};
diff --git a/src/pages/ProfilePage/ProfilePage.tsx b/src/pages/ProfilePage/ProfilePage.tsx
index 4769999..293b766 100644
--- a/src/pages/ProfilePage/ProfilePage.tsx
+++ b/src/pages/ProfilePage/ProfilePage.tsx
@@ -15,11 +15,7 @@ const ProfilePage: React.FC = () => {
const { user } = useAuth();
const { data: userInfo, mutate: setUserInfo } = useUser(username);
- const { data: polls, mutate: fetchPolls } = useProfile(userInfo?._id);
-
- useEffect(() => {
- fetchPolls();
- }, [userInfo, fetchPolls])
+ const { data: polls } = useProfile(userInfo?._id);
useEffect(() => {
if (!username) {