Skip to content

Commit b373488

Browse files
committed
fixed frontend user state
1 parent a32c5ec commit b373488

4 files changed

Lines changed: 41 additions & 22 deletions

File tree

blog-frontend/src/App.tsx

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,18 @@ import './App.css';
44
import Login from './components/Login';
55
import PostCard from './components/PostCard';
66
import {BrowserRouter as Router} from 'react-router-dom'
7-
import { getAllPosts, Post, removePost } from './services/blogServices';
7+
import { createPost, getAllPosts, Post, removePost } from './services/blogServices';
88
import NavBar from './components/NavBar';
99
import SignUp from './components/SignUp';
1010
import { axiosInstance } from './services/authServices';
1111
import PostForm from './components/PostForm';
1212
import PostDetails from './pages/PostDetails';
1313
import EditPost from './pages/EditPost';
14+
import { getUserFromToken } from './services/userService';
1415
// import {getUserFromToken } from './services/userService'
1516

1617
const App : React.FC = () => {
17-
const [posts,setPosts] = useState<Post[]>()
18+
const [posts,setPosts] = useState<Post[]>([])
1819
const [isLoading,setIsLoading] = useState(true)
1920
const [user, setUser] = useState('')
2021

@@ -23,6 +24,7 @@ const App : React.FC = () => {
2324
const newPosts = await getAllPosts()
2425
setPosts(newPosts)
2526
setIsLoading(false)
27+
setUser(getUserFromToken())
2628
}
2729
getPosts()
2830
},[])
@@ -38,9 +40,14 @@ const App : React.FC = () => {
3840

3941
const deletePost = (title: string)=>{
4042
removePost(title)
41-
const newPosts = posts?.filter(post=>post.title===title)
43+
const newPosts = posts?.filter(post=>post.title!==title)
4244
setPosts(newPosts)
4345
}
46+
47+
const addPost = (post : Post) =>{
48+
createPost(post)
49+
setPosts([...posts,post])
50+
}
4451

4552
return (
4653
<>
@@ -56,7 +63,8 @@ const App : React.FC = () => {
5663
<PostCard
5764
key={post.id}
5865
title={post.title}
59-
author={post.username}
66+
username={post.username}
67+
content={post.content}
6068
excerpt={post.excerpt}
6169
status={post.status}
6270
published={post.published}
@@ -74,12 +82,14 @@ const App : React.FC = () => {
7482
<SignUp />
7583
</Route>
7684
<Route exact path="/create">
77-
<PostForm user={user} />
85+
<PostForm user={user} addPost={addPost} />
7886
</Route>
7987
<Route exact path="/posts/:title">
8088
<PostDetails />
8189
</Route>
82-
90+
<Route exact path="/posts/:title/edit">
91+
<EditPost />
92+
</Route>
8393
</Router>
8494
</>
8595
);

blog-frontend/src/components/PostCard.tsx

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
import moment from 'moment'
22
import React from 'react'
33
import { Link } from 'react-router-dom'
4+
import { Post } from '../services/blogServices'
45

5-
interface PostCardProps {
6-
title: string;
7-
author: string;
8-
excerpt: string;
9-
status:string;
10-
published: string;
11-
category?: string[];
6+
interface PostCardProps extends Post {
127
deletePost: (title:string)=>void
138
user: string
149
}
1510

16-
const PostCard : React.FC <PostCardProps> = ({title,author,excerpt,status,published,category, deletePost, user}) => {
11+
const PostCard : React.FC <PostCardProps> = ({title, content,username,excerpt,status,published,category, deletePost, user}) => {
1712

1813
return (
1914
<div
@@ -27,16 +22,17 @@ const PostCard : React.FC <PostCardProps> = ({title,author,excerpt,status,publis
2722
<h1>{title}</h1>
2823
<h3>{status}</h3>
2924
<h4>{moment(published).format('MMMM Do YYYY, h:mm:ss a')}</h4>
30-
<small>Written by {author}</small>
25+
<small>Written by {username}</small>
3126
<p>{excerpt}</p>
3227
<small>Categories: {category}</small>
3328
</Link>
3429
<br/>
35-
{author===user&&(
30+
{username===user&&(
3631
<>
3732
<Link
3833
to={{
39-
pathname: `posts/:title/edit`
34+
pathname: `posts/${title}/edit`,
35+
state: {title,status,published,content}
4036
}}
4137
>
4238
Edit

blog-frontend/src/components/PostForm.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { userInfo } from 'os'
22
import React, { FC, useState } from 'react'
3+
import { useHistory } from 'react-router'
34
import { createPost, Post } from '../services/blogServices'
45

56
enum Status {
@@ -8,15 +9,17 @@ enum Status {
89
}
910

1011
interface Props {
11-
user: string
12+
user: string,
13+
addPost: (post:Post)=>void
1214
}
1315

14-
const PostForm : FC<Props> = ({user}) => {
16+
const PostForm : FC<Props> = ({user,addPost}) => {
1517
const [title, setTitle] = useState('')
1618
const [content, setContent] = useState('')
1719
const [status, setStatus] = useState(Status.DRAFT)
1820
const [published, setPublished] = useState('')
1921
const [category, setCategory] = useState<string[]>()
22+
const history = useHistory()
2023

2124
const handleSubmit = (e : React.FormEvent) => {
2225
e.preventDefault()
@@ -30,7 +33,8 @@ const PostForm : FC<Props> = ({user}) => {
3033
slug: slugiy(title),
3134
category
3235
}
33-
createPost(post)
36+
addPost(post)
37+
history.push('/')
3438
}
3539

3640
const slugiy = (string: string) : string =>{

blog-frontend/src/pages/EditPost.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
1-
import React, { FC } from 'react'
1+
import React, { FC, useState } from 'react'
2+
import { useLocation } from 'react-router'
23
import { Post } from '../services/blogServices'
34

4-
const EditPost : FC<Post> = ({title,content,status,published}) => {
5+
interface EditPostProps{
6+
title: string;
7+
content: string;
8+
status:string;
9+
published: string;
10+
}
11+
12+
const EditPost : FC = () => {
13+
514
return (
615
<>
716

0 commit comments

Comments
 (0)