@@ -15,18 +15,22 @@ export default function Reviews({ id, reviewList }) {
1515
1616 const [ isEditorReadOnly , setIsEditorReadOnly ] = useState ( false )
1717 const [ sameEmailError , setSameEmailError ] = useState ( false )
18+ const [ reviews , setReviews ] = useState ( reviewList )
1819
1920 const formik = useFormik ( {
2021 initialValues : { name : '' , email : '' , message : '' } ,
2122 onSubmit : async ( values , { resetForm } ) => {
2223
2324 setIsEditorReadOnly ( true )
2425
26+ // fetch api route with attached data
2527 await fetch ( `/api/postReview?productId=${ id } &name=${ values . name } &email=${ values . email } &reviewText=${ encodeURIComponent ( values . message ) } ` )
2628 . then ( res => {
29+
2730 if ( res . status >= 400 ) {
2831 if ( res . status === 400 ) {
2932
33+ // api will send status 400 if email is already present, then we trigger error
3034 setSameEmailError ( res . statusText )
3135 const err = new Error ( res . statustext )
3236 setIsEditorReadOnly ( false )
@@ -36,7 +40,7 @@ export default function Reviews({ id, reviewList }) {
3640 } else if ( res . status > 400 ) {
3741
3842 setSameEmailError ( false )
39- const err = new Error ( 'Error' )
43+ const err = new Error ( 'Error in components/productPage/Reviews.js, formik onSubmit, fetch, .then statement, if (res.status > 400) condition ' )
4044 setIsEditorReadOnly ( false )
4145
4246 throw err
@@ -45,13 +49,16 @@ export default function Reviews({ id, reviewList }) {
4549 return res . json ( )
4650 } )
4751 . then ( data => {
52+
4853 resetForm ( )
4954 setEditorState ( EditorState . push ( editorState , ContentState . createFromText ( '' ) ) )
5055
5156 setSameEmailError ( false )
5257
53- const publishedReview = data . data . createReview . data
58+ const publishedReview = data . data . createReview . data
59+ // for now we're pushing review obj into array with others, after page reload they will be fetched altogether
5460 reviewList . push ( publishedReview )
61+ setReviews ( reviewList )
5562
5663 setIsEditorReadOnly ( false )
5764
@@ -65,13 +72,12 @@ export default function Reviews({ id, reviewList }) {
6572 email : Yup . string ( ) . min ( 6 ) . max ( 50 ) ,
6673 message : Yup . string ( ) . min ( 1 ) . max ( 100 ) . required ( 'Required' )
6774 } )
68- } )
69-
70- const [ reviews , setReviews ] = useState ( reviewList )
75+ } )
7176
7277 const value = formik . values . message
7378
7479 const prepareDraft = value => {
80+
7581 const draft = htmlToDraft ( value )
7682 const contentState = ContentState . createFromBlockArray ( draft . contentBlocks )
7783 const editorState = EditorState . createWithContent ( contentState )
@@ -84,6 +90,7 @@ export default function Reviews({ id, reviewList }) {
8490 const [ editorState , setEditorState ] = useState ( value ? prepareDraft ( value ) : EditorState . createEmpty ( ) )
8591
8692 const onEditorStateChange = editorState => {
93+
8794 const forFormik = draftToHtml (
8895 convertToRaw ( editorState . getCurrentContent ( ) )
8996 )
0 commit comments