@@ -10,10 +10,24 @@ const WhitebookUpdateModal = ({ trigger, whitebook }) => {
10
10
const [ title , setTitle ] = useState ( whitebook . title ) ;
11
11
const [ content , setContent ] = useState ( whitebook . content ) ;
12
12
const [ showOnlyLogin , setShowOnlyLogin ] = useState ( whitebook . show_only_login ) ;
13
- const [ inputType , setInputType ] = useState ( whitebook . link ? 'link' : 'pdf' ) ; // 초기값 설정
13
+ const [ inputType , setInputType ] = useState ( whitebook . link ? 'link' : 'pdf' ) ;
14
14
const [ link , setLink ] = useState ( whitebook . link || '' ) ;
15
15
const [ pdfFile , setPdfFile ] = useState ( null ) ;
16
16
17
+ const handleModalOpen = ( ) => {
18
+ setOpen ( true ) ;
19
+ // 링크에 whitebook이 들어간다면 S3에 있는 pdf 파일임
20
+ if ( whitebook . link && whitebook . link . includes ( 'whitebook' ) ) {
21
+ const link = whitebook . link ;
22
+ setLink ( '' ) ;
23
+ setInputType ( 'pdf' ) ;
24
+ fetch ( link )
25
+ . then ( ( res ) => res . blob ( ) )
26
+ . then ( ( blob ) => setPdfFile ( blob ) )
27
+ . catch ( ( err ) => console . error ( err ) ) ;
28
+ }
29
+ } ;
30
+
17
31
const handleFileChange = ( file ) => {
18
32
if ( ! file || file . type !== 'application/pdf' ) {
19
33
alert ( 'PDF 파일만 업로드 가능합니다.' ) ;
@@ -24,32 +38,32 @@ const WhitebookUpdateModal = ({ trigger, whitebook }) => {
24
38
} ;
25
39
26
40
const handleSubmit = async ( ) => {
27
- try {
28
- const formData = new FormData ( ) ;
29
- formData . append ( 'title' , title ) ;
30
- formData . append ( 'content' , content ) ;
31
- formData . append ( 'show_only_login' , showOnlyLogin ) ;
41
+ const formData = new FormData ( ) ;
42
+ formData . append ( 'title' , title ) ;
43
+ formData . append ( 'content' , content ) ;
44
+ formData . append ( 'show_only_login' , showOnlyLogin ) ;
32
45
33
- if ( inputType === 'link' && link ) {
34
- formData . append ( 'link' , link ) ;
35
- } else if ( inputType === 'pdf' && pdfFile ) {
36
- formData . append ( 'pdf_file' , pdfFile ) ;
37
- } else {
38
- alert ( '링크 또는 PDF 파일을 입력해주세요.' ) ;
39
- return ;
40
- }
46
+ if ( inputType === 'link' && link ) {
47
+ formData . append ( 'link' , link ) ;
48
+ } else if ( inputType === 'pdf' && pdfFile ) {
49
+ formData . append ( 'pdf_file' , pdfFile ) ;
50
+ } else {
51
+ alert ( '링크 또는 PDF 파일을 입력해주세요.' ) ;
52
+ return ;
53
+ }
41
54
42
- await PoPoAxios . put ( `/whitebook/${ whitebook . uuid } ` , formData , {
43
- withCredentials : true ,
44
- headers : { 'Content-Type' : 'multipart/form-data' } ,
55
+ await PoPoAxios . put ( `/whitebook/${ whitebook . uuid } ` , formData , {
56
+ withCredentials : true ,
57
+ headers : { 'Content-Type' : 'multipart/form-data' } ,
58
+ } )
59
+ . then ( ( ) => {
60
+ alert ( '생활백서 정보를 수정 했습니다.' ) ;
61
+ window . location . reload ( ) ;
62
+ } )
63
+ . catch ( ( err ) => {
64
+ alert ( '생활백서 수정에 실패했습니다.' ) ;
65
+ console . error ( err ) ;
45
66
} ) ;
46
-
47
- setOpen ( false ) ;
48
- window . location . reload ( ) ;
49
- } catch ( e ) {
50
- alert ( '생활백서 수정에 실패했습니다.' ) ;
51
- console . error ( e ) ;
52
- }
53
67
} ;
54
68
55
69
return (
@@ -58,7 +72,7 @@ const WhitebookUpdateModal = ({ trigger, whitebook }) => {
58
72
open = { open }
59
73
trigger = { trigger }
60
74
onClose = { ( ) => setOpen ( false ) }
61
- onOpen = { ( ) => setOpen ( true ) }
75
+ onOpen = { handleModalOpen }
62
76
>
63
77
< Modal . Header > 생활백서 수정</ Modal . Header >
64
78
< Modal . Content >
@@ -110,13 +124,29 @@ const WhitebookUpdateModal = ({ trigger, whitebook }) => {
110
124
111
125
{ /* 조건부 렌더링: PDF 업로드 필드 */ }
112
126
{ inputType === 'pdf' && (
113
- < Form . Input
114
- required
115
- type = "file"
116
- label = { '생활백서 PDF' }
117
- accept = "application/pdf"
118
- onChange = { ( e ) => handleFileChange ( e . target . files [ 0 ] ) }
119
- />
127
+ < Form . Field >
128
+ < Form . Input
129
+ required
130
+ label = { '생활백서 PDF' }
131
+ type = "file"
132
+ accept = "application/pdf"
133
+ onChange = { ( e ) => handleFileChange ( e . target . files [ 0 ] ) }
134
+ />
135
+ < label >
136
+ { pdfFile && (
137
+ < a
138
+ href = { URL . createObjectURL ( pdfFile ) }
139
+ target = "_blank"
140
+ rel = "noopener noreferrer"
141
+ style = { {
142
+ textDecoration : 'underline' ,
143
+ } }
144
+ >
145
+ 업로드한 PDF 확인
146
+ </ a >
147
+ ) }
148
+ </ label >
149
+ </ Form . Field >
120
150
) }
121
151
122
152
< Form . TextArea
@@ -125,6 +155,7 @@ const WhitebookUpdateModal = ({ trigger, whitebook }) => {
125
155
value = { content }
126
156
onChange = { ( e ) => setContent ( e . target . value ) }
127
157
/>
158
+
128
159
< Form . Checkbox
129
160
required
130
161
label = { '로그인 유저에게만 보이기' }
0 commit comments