@@ -6,6 +6,7 @@ import * as c from '../style.css';
66import SelectedPhoto from '../../uploadedPhoto' ;
77import UploadFile from '../../UploadFile' ;
88import { useStep5Store } from '@/features/post/stores/Step5Store' ;
9+ import { ALLOWED_EXTENSIONS , MAX_DESC , MAX_SIZE_BYTES , MAX_SIZE_MB , MAX_TITLE } from '@/libs/constants' ;
910
1011const Step5 = ( ) => {
1112 const fileStore = useStep5Store ( state => state . files ) ;
@@ -23,7 +24,22 @@ const Step5 = () => {
2324
2425 const fileArray = Array . from ( files ) ;
2526
26- const updatedFiles = [ ...fileStore , ...fileArray ] ;
27+ const validFiles = fileArray . filter ( file => {
28+ // TODO: alert ์ด๋ป๊ฒ ๋์์ค์ง ๋์์ธ ์์ฒญ
29+ const ext = file . name . split ( '.' ) . pop ( ) ?. toLowerCase ( ) ;
30+ console . log ( ext ) ;
31+ if ( ! ext || ! ALLOWED_EXTENSIONS . includes ( ext ) ) {
32+ alert ( `"${ file . name } "์(๋) ์ง์ํ์ง ์๋ ํ์ฅ์์
๋๋ค.` ) ;
33+ return false ;
34+ }
35+ if ( file . size > MAX_SIZE_BYTES ) {
36+ alert ( `"${ file . name } "์(๋) ${ MAX_SIZE_MB } MB๋ฅผ ์ด๊ณผํฉ๋๋ค.` ) ;
37+ return false ;
38+ }
39+ return true ;
40+ } ) ;
41+
42+ const updatedFiles = [ ...fileStore , ...validFiles ] ;
2743 fileSetter ( updatedFiles ) ;
2844 } ;
2945
@@ -44,18 +60,24 @@ const Step5 = () => {
4460 < header className = { c . Head } > ์ํ ์๊ฐ๋ฅผ ์์ฑํด ์ฃผ์ธ์</ header >
4561 < div className = { c . Content } >
4662 < div className = { c . DetailContent } >
47- ์ํ๋ช
์ ์
๋ ฅํด ์ฃผ์ธ์
48- < InputField value = { titleStore } setValue = { titleSetter } > </ InputField >
63+ ์ํ๋ช
์ ์
๋ ฅํด ์ฃผ์ธ์ ( { titleStore . length } / { MAX_TITLE } )
64+ < InputField value = { titleStore } setValue = { titleSetter } maxLength = { MAX_TITLE } > </ InputField >
4965 </ div >
5066 < div className = { c . DetailContent } >
51- ์ํ ์ค๋ช
์ ์
๋ ฅํด ์ฃผ์ธ์
67+ ์ํ ์ค๋ช
์ ์
๋ ฅํด ์ฃผ์ธ์ ( { descStore . length } / { MAX_DESC } )
5268 < div className = { s . ProductDesc } >
53- < MultilineInputfield onChange = { handleDesc } value = { descStore } />
54- < div className = { s . SelectPhotoContainer } >
55- < UploadFile onChange = { handleImageUploaded } />
56- { images . map ( ( file , index ) => (
57- < SelectedPhoto key = { index } file = { file } onClick = { ( ) => removeUploadedImage ( index ) } />
58- ) ) }
69+ < MultilineInputfield onChange = { handleDesc } value = { descStore } maxLength = { MAX_DESC } />
70+ < div className = { s . PhotoLimit } >
71+ < div className = { s . SelectPhotoContainer } >
72+ < UploadFile onChange = { handleImageUploaded } />
73+ { images . map ( ( file , index ) => (
74+ < SelectedPhoto key = { index } file = { file } onClick = { ( ) => removeUploadedImage ( index ) } />
75+ ) ) }
76+ </ div >
77+ < div className = { s . AlertText } >
78+ < span className = "mgc_alert_octagon_fill" > </ span >
79+ ์ฌ์ง์ ์ต๋ 6์ฅ๊น์ง ๋ฑ๋ก์ด ๊ฐ๋ฅํด์.
80+ </ div >
5981 </ div >
6082 </ div >
6183 </ div >
0 commit comments