1
- import React , { useState } from "react" ;
1
+ import React , { useState , useEffect } from "react" ;
2
2
import { PageContainer , ContentContainer , FixedButtonContainer } from "../../styles/posting/PostingStyles" ;
3
3
import { InputField , Tag , Toggle , WeekdayPicker , WorkTimePicker , PayPicker , AddressInput , PhotoUpload , DescriptionInput , PhoneInput , Button } from "../../components" ;
4
4
import "../../styles/posting/Posting.css" ;
5
5
import { POSTING_UPMU_TAG } from "../../constants" ;
6
- import { postJobPosting , updateJobPosting } from "../../api" ;
6
+ import { postJobPosting , updateJobPosting , getPostById } from "../../api" ;
7
7
import { useNavigate , useLocation } from "react-router-dom" ;
8
8
import { useSelector } from "react-redux" ;
9
- import getAccessToken from "../../utils/getAccessToken" ; // 일반 함수로 가져오기
9
+ import getAccessToken from "../../utils/getAccessToken" ; // 일반 함수로 가져와야 오류 안뜸!!
10
10
import { createPayload } from "../../utils/posting/payloadHelper" ; // 분리된 payload 생성 함수
11
11
import { validateForm } from "../../utils/posting/validationHelper" ; // 분리된 유효성 검증 함수
12
12
import { parseAddress , convertDays } from "../../utils/posting/formatHelper" ; // 분리된 주소 및 요일 변환 함수
13
13
14
14
const Posting = ( ) => {
15
15
const state = useSelector ( ( state ) => state ) ;
16
16
const accessToken = getAccessToken ( state ) ;
17
+ const location = useLocation ( ) ;
18
+ const navigate = useNavigate ( ) ;
19
+ const userId = useSelector ( ( state ) => state . userInfo . userId ) ;
20
+ const { mode, postId } = location . state || { mode : "create" , postId : null } ;
21
+
17
22
const [ isOptionSelected , setIsOptionSelected ] = useState ( false ) ;
18
23
const [ validStates , setValidStates ] = useState ( {
19
24
title : true ,
@@ -36,12 +41,6 @@ const Posting = () => {
36
41
workPeriod : "1개월 이상"
37
42
} ) ;
38
43
39
- const location = useLocation ( ) ;
40
- const navigate = useNavigate ( ) ;
41
- const mode = location . state ?. mode || "create" ;
42
- const postId = location . state ?. postId || null ;
43
- const userId = useSelector ( ( state ) => state . userInfo . userId ) ;
44
-
45
44
const handleChange = ( key , value ) => {
46
45
setFormData ( ( prev ) => ( { ...prev , [ key ] : value } ) ) ;
47
46
} ;
@@ -59,6 +58,59 @@ const Posting = () => {
59
58
handleChange ( "selectedOption" , value ) ;
60
59
setIsOptionSelected ( true ) ;
61
60
} ;
61
+ // 게시글 수정 useEffect
62
+ useEffect ( ( ) => {
63
+ if ( mode === "modify" && postId ) {
64
+ // 수정 모드에서 데이터 가져오기
65
+ fetchPostData ( postId ) ;
66
+ }
67
+ } , [ mode , postId ] ) ;
68
+
69
+ const fetchPostData = async ( postId ) => {
70
+ try {
71
+ const postData = await getPostById ( postId , accessToken ) ;
72
+ populateFormData ( postData ) ; // 폼 데이터 초기화
73
+ } catch ( error ) {
74
+ alert ( "게시글 데이터를 불러오는 데 실패했습니다." ) ;
75
+ }
76
+ } ;
77
+
78
+ const populateFormData = ( postData ) => {
79
+ const {
80
+ title,
81
+ workType,
82
+ pay,
83
+ payType,
84
+ workStartHour,
85
+ workStartMinute,
86
+ workEndHour,
87
+ workEndTimeMinute,
88
+ isNegotiable,
89
+ applyNumber,
90
+ workDays,
91
+ content,
92
+ doName,
93
+ siName,
94
+ detailName,
95
+ } = postData . postData ;
96
+
97
+ setFormData ( {
98
+ ...formData ,
99
+ title,
100
+ workTags : [ workType ] ,
101
+ workDays,
102
+ workTime : {
103
+ start : `${ workStartHour } :${ workStartMinute . toString ( ) . padStart ( 2 , "0" ) } ` ,
104
+ end : `${ workEndHour } :${ workEndTimeMinute . toString ( ) . padStart ( 2 , "0" ) } ` ,
105
+ } ,
106
+ pay,
107
+ payType,
108
+ isNegotiable,
109
+ applyNumber,
110
+ description : content ,
111
+ workLocation : `${ doName } ${ siName } ${ detailName } ` , // 주소 결합
112
+ } ) ;
113
+ } ;
62
114
63
115
const handleSubmit = async ( ) => {
64
116
const allValid = Object . values ( validStates ) . every ( ( isValid ) => isValid ) ;
@@ -95,7 +147,7 @@ const Posting = () => {
95
147
return (
96
148
< PageContainer >
97
149
< ContentContainer >
98
- < div className = "header" > 어떤 알바를 구하고 계신가요?</ div >
150
+ < div className = "header" > { mode === "modify" ? "게시글 수정" : " 어떤 알바를 구하고 계신가요?" } </ div >
99
151
< div className = "toggle-section" >
100
152
< Toggle
101
153
options = { [ "업무 목적" ] }
0 commit comments