Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
students
travel
Commits
e0e61741
Commit
e0e61741
authored
Aug 16, 2022
by
Lee Soobeom
Browse files
0816
parent
a092f3d1
Changes
5
Hide whitespace changes
Inline
Side-by-side
frontend/src/board/board.tsx
View file @
e0e61741
import
React
,
{
useState
,
MouseEvent
,
useEffect
}
from
"
react
"
;
import
{
Link
,
useLocation
,
useNavigate
}
from
"
react-router-dom
"
;
import
{
Link
,
Outlet
,
useLocation
,
useNavigate
,
useOutletContext
,
}
from
"
react-router-dom
"
;
import
{
PostType
}
from
"
../types
"
;
import
Post
from
"
../post/post
"
;
import
{
postApi
}
from
"
../apis
"
;
import
{
useAuth
}
from
"
../auth/auth.context
"
;
interface
P
ost
s
{
interface
P
rop
s
{
posts
:
PostType
[];
}
...
...
@@ -14,36 +20,13 @@ interface Newpost {
}
export
default
function
BoardPage
()
{
const
[
posts
,
setPosts
]
=
useState
<
PostType
[]
>
();
const
posts
=
useOutletContext
<
PostType
[]
>
();
const
location
=
useLocation
()
as
Newpost
;
const
newPost
=
location
.
state
;
const
deletePostId
=
location
.
state
.
_id
;
const
navigate
=
useNavigate
();
const
{
user
}
=
useAuth
();
// console.log("get newPost Info", newPost);
const
setNewPosts
=
(
newpost
:
PostType
)
=>
{
const
postArr
=
posts
?.
splice
(
-
1
,
0
,
newPost
);
if
(
!
(
postArr
===
undefined
))
{
setPosts
(
postArr
);
}
};
useEffect
(()
=>
{
getDataList
();
setNewPosts
(
newPost
);
},
[]);
const
getDataList
=
async
()
=>
{
const
res
=
await
postApi
.
getData
();
setPosts
(
res
);
//posts = res
};
const
deletePost
=
async
(
postId
:
string
)
=>
{
const
res
=
await
postApi
.
deletePost
(
postId
);
return
res
;
};
console
.
log
(
"
posts
"
,
posts
);
const
handleClick
=
async
(
event
:
MouseEvent
<
HTMLButtonElement
>
)
=>
{
const
postId
=
event
.
currentTarget
.
id
;
...
...
@@ -55,8 +38,6 @@ export default function BoardPage() {
if
(
!
(
newpost
?.
_id
===
undefined
))
{
const
post
=
newpost
;
const
res
=
await
postApi
.
addCounts
(
post
.
_id
,
post
.
counts
);
// console.log(res);
// setPosts(res);
}
};
...
...
@@ -82,7 +63,7 @@ export default function BoardPage() {
<
div
className
=
"flex justify-end"
>
<
div
className
=
"border-2 border-blue-500 rounded mb-2 whitespace-nowrap"
>
<
button
onClick
=
{
GoLogin
}
>
<
Link
to
=
"
/
posting"
>
글쓰기
</
Link
>
<
Link
to
=
"posting"
>
글쓰기
</
Link
>
</
button
>
</
div
>
</
div
>
...
...
@@ -99,6 +80,8 @@ export default function BoardPage() {
</
div
>
</
div
>
</
div
>
<
Outlet
/>
</
div
>
);
}
frontend/src/board/posts.tsx
View file @
e0e61741
import
React
,
{
ReactNode
}
from
"
react
"
;
import
{
Outlet
}
from
"
react-router-dom
"
;
import
React
,
{
ReactNode
,
useState
,
useEffect
}
from
"
react
"
;
import
{
Outlet
,
useLocation
}
from
"
react-router-dom
"
;
import
{
postApi
}
from
"
../apis
"
;
import
{
PostType
}
from
"
../types
"
;
interface
FormType
{
state
:
FormData
;
}
export
default
function
Posts
()
{
return
<
Outlet
/>;
const
[
posts
,
setPosts
]
=
useState
<
PostType
[]
>
([]);
const
location
=
useLocation
()
as
FormType
;
const
formdata
=
location
.
state
;
useEffect
(()
=>
{
getDataList
();
},
[]);
//Read
const
getDataList
=
async
()
=>
{
const
res
=
await
postApi
.
getData
();
setPosts
(
res
);
};
//Create
const
createPost
=
async
(
filelist
:
FileList
)
=>
{
if
(
!
(
filelist
===
undefined
||
filelist
===
null
))
{
if
(
filelist
.
length
===
1
)
{
formdata
.
append
(
"
picture
"
,
filelist
?.[
0
]);
const
res
=
await
postApi
.
createFileAndPost
(
formdata
);
return
res
;
}
else
{
for
(
var
i
=
0
;
i
<
filelist
.
length
;
i
++
)
{
formdata
.
append
(
"
picture
"
,
filelist
?.[
i
]);
}
const
res
=
await
postApi
.
createFileAndPost
(
formdata
);
return
res
;
}
}
};
//Delete
const
deletePost
=
async
(
postId
:
string
)
=>
{
const
res
=
await
postApi
.
deletePost
(
postId
);
return
res
;
};
console
.
log
(
"
sdfa
"
,
posts
);
return
<
Outlet
context
=
{
{
posts
,
createPost
,
deletePost
}
}
/>;
}
frontend/src/home/header.tsx
View file @
e0e61741
...
...
@@ -73,7 +73,7 @@ export default function Header() {
<
div
></
div
>
<
button
className
=
"shrink-0 mr-3 text-xs "
>
<
Link
to
=
"/
board
"
to
=
"/
posts
"
className
=
"hover:text-sky-300 focus:text-purple-500 mx-2 grid items-center"
>
게시판
...
...
frontend/src/post/intopost.tsx
View file @
e0e61741
...
...
@@ -30,9 +30,9 @@ export function IntoPost() {
try
{
if
(
confirm
(
"
삭제하시겠습니까?
"
)
==
true
)
{
const
postId
=
event
.
currentTarget
.
id
;
const
res
=
await
postApi
.
deletePost
(
postId
);
navigate
(
"
/
board
"
);
console
.
log
(
"
delete post
"
,
res
);
//
const res = await postApi.deletePost(postId);
navigate
(
"
/
posts
"
);
//
console.log("delete post", res);
}
else
{
return
false
;
}
...
...
frontend/src/post/posting.tsx
View file @
e0e61741
...
...
@@ -45,29 +45,29 @@ export default function Posting() {
const
imgArr
=
new
Array
();
const
sendImg2Db
=
async
(
filelist
:
FileList
)
=>
{
const
formdata
=
new
FormData
();
formdata
.
append
(
"
title
"
,
user
.
title
);
formdata
.
append
(
"
text
"
,
user
.
text
);
formdata
.
append
(
"
theme
"
,
user
.
theme
);
formdata
.
append
(
"
city
"
,
user
.
city
);
if
(
!
(
filelist
===
undefined
||
filelist
===
null
))
{
if
(
filelist
.
length
===
1
)
{
formdata
.
append
(
"
picture
"
,
filelist
?.[
0
]);
//
const sendImg2Db = async (filelist: FileList) => {
//
const formdata = new FormData();
//
formdata.append("title", user.title);
//
formdata.append("text", user.text);
//
formdata.append("theme", user.theme);
//
formdata.append("city", user.city);
//
if (!(filelist === undefined || filelist === null)) {
//
if (filelist.length === 1) {
//
formdata.append("picture", filelist?.[0]);
const
res
=
await
postApi
.
createFileAndPost
(
formdata
);
//
const res = await postApi.createFileAndPost(formdata);
return
res
;
}
else
{
for
(
var
i
=
0
;
i
<
filelist
.
length
;
i
++
)
{
formdata
.
append
(
"
picture
"
,
filelist
?.[
i
]);
}
const
res
=
await
postApi
.
createFileAndPost
(
formdata
);
//
return res;
//
} else {
//
for (var i = 0; i < filelist.length; i++) {
//
formdata.append("picture", filelist?.[i]);
//
}
//
const res = await postApi.createFileAndPost(formdata);
return
res
;
}
}
};
//
return res;
//
}
//
}
//
};
async
function
handlePostSubmit
(
event
:
FormEvent
)
{
event
.
preventDefault
();
...
...
@@ -77,8 +77,13 @@ export default function Posting() {
if
(
postingFormMatch
(
user
,
file
))
{
setLoading
(
true
);
if
(
file
)
{
const
postRes
=
await
sendImg2Db
(
file
);
navigate
(
"
/posts
"
,
{
replace
:
true
,
state
:
postRes
});
const
formdata
=
new
FormData
();
formdata
.
append
(
"
title
"
,
user
.
title
);
formdata
.
append
(
"
text
"
,
user
.
text
);
formdata
.
append
(
"
theme
"
,
user
.
theme
);
formdata
.
append
(
"
city
"
,
user
.
city
);
// const postRes = await createPost(file, formdata);
navigate
(
"
/posts
"
,
{
replace
:
true
,
state
:
formdata
});
}
setSuccess
(
true
);
setError
(
""
);
...
...
@@ -120,33 +125,17 @@ export default function Posting() {
}
}
const
title
Change
=
(
event
:
React
.
ChangeEvent
<
HTMLTextAreaElement
>
)
=>
{
const
title
=
event
.
currentTarget
.
value
;
const
newUser
=
{
...
user
,
title
:
titl
e
};
const
string
Change
=
(
event
:
React
.
ChangeEvent
<
HTMLTextAreaElement
>
)
=>
{
const
{
name
,
value
}
=
event
.
currentTarget
;
const
newUser
=
{
...
user
,
[
name
]:
valu
e
};
console
.
log
(
event
.
currentTarget
.
value
);
setTitle
(
event
.
currentTarget
.
value
);
setUser
(
newUser
);
};
const
textChange
=
(
event
:
React
.
ChangeEvent
<
HTMLTextAreaElement
>
)
=>
{
const
text
=
event
.
currentTarget
.
value
;
const
newUser
=
{
...
user
,
text
:
text
};
console
.
log
(
event
.
currentTarget
.
value
);
setText
(
event
.
currentTarget
.
value
);
setUser
(
newUser
);
};
const
cityChange
=
(
event
:
React
.
ChangeEvent
<
HTMLSelectElement
>
)
=>
{
const
city
=
event
.
currentTarget
.
value
;
const
newUser
=
{
...
user
,
city
:
city
};
console
.
log
(
event
.
currentTarget
.
value
);
setCity
(
event
.
currentTarget
.
value
);
setUser
(
newUser
);
};
const
themeChange
=
(
event
:
React
.
ChangeEvent
<
HTMLSelectElement
>
)
=>
{
const
theme
=
event
.
currentTarget
.
value
;
const
newUser
=
{
...
user
,
theme
:
theme
};
const
selectChange
=
(
event
:
React
.
ChangeEvent
<
HTMLSelectElement
>
)
=>
{
const
{
name
,
value
}
=
event
.
currentTarget
;
const
newUser
=
{
...
user
,
[
name
]:
value
};
console
.
log
(
event
.
currentTarget
.
value
);
setTheme
(
event
.
currentTarget
.
value
);
setUser
(
newUser
);
...
...
@@ -206,7 +195,7 @@ export default function Posting() {
<
select
name
=
"city"
className
=
"border-2 border-sky-400 text-xs h-6 place-self-center"
onChange
=
{
city
Change
}
onChange
=
{
select
Change
}
defaultValue
=
"city"
>
<
option
value
=
"city"
>
도시
</
option
>
...
...
@@ -225,7 +214,7 @@ export default function Posting() {
<
select
name
=
"theme"
className
=
"border-2 border-sky-400 text-xs h-6 place-self-center"
onChange
=
{
theme
Change
}
onChange
=
{
select
Change
}
defaultValue
=
"theme"
>
<
option
value
=
"theme"
>
테마
</
option
>
...
...
@@ -254,7 +243,7 @@ export default function Posting() {
<
div
className
=
"flex flex-col w-full border-y-2 border-sky-500"
>
<
textarea
name
=
"title"
onChange
=
{
title
Change
}
onChange
=
{
string
Change
}
placeholder
=
"제목을 입력해 주세요!"
className
=
"flex focus:outline-none"
/>
...
...
@@ -266,7 +255,7 @@ export default function Posting() {
</
div
>
</
div
>
<
textarea
onChange
=
{
text
Change
}
onChange
=
{
string
Change
}
name
=
"text"
placeholder
=
"여행 후기를 알려주세요!"
className
=
"flex h-44 border-t-2 border-sky-200 focus:outline-none "
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment