From 482d0dc2b68989e63e6b620abeaec7f583f758da Mon Sep 17 00:00:00 2001 From: Hazem Krimi Date: Fri, 28 May 2021 17:42:07 +0100 Subject: [PATCH] Complete add feature --- src/pages/AddFeature/index.tsx | 152 +++++++++++++++++++++++++++------ 1 file changed, 128 insertions(+), 24 deletions(-) diff --git a/src/pages/AddFeature/index.tsx b/src/pages/AddFeature/index.tsx index 1520bfd..3527a9e 100644 --- a/src/pages/AddFeature/index.tsx +++ b/src/pages/AddFeature/index.tsx @@ -13,6 +13,7 @@ import { Alert, TextArea, CheckBox, + ImagePreview, } from '../../components'; import { Wrapper } from './styles'; import { ArrowLeft, General, Design } from '../../assets'; @@ -39,7 +40,17 @@ const AddFeature = () => { }>; price: number; repo: string; - }>(); + }>({ + name: '', + description: '', + featureType: '', + image: { + name: '', + src: '', + }, + price: 0, + repo: '', + }); const [selectedSection, setSelectedSection] = useState< 'general' | 'wireframes' @@ -100,6 +111,17 @@ const AddFeature = () => { }, }); + const wireframesForm = useFormik<{ + wireframes: Array<{ name: string; src: string }>; + }>({ + initialValues: { + wireframes: [], + }, + onSubmit: ({ wireframes }) => { + addFeature({ variables: { feature: { ...newFeature, wireframes } } }); + }, + }); + return role === 'developer' ? ( @@ -125,14 +147,13 @@ const AddFeature = () => { icon={} color={role || 'client'} text='General' - selected + selected={selectedSection === 'general'} /> } color={role || 'client'} text='Wireframes' selected={selectedSection === 'wireframes'} - onClick={() => setSelectedSection('wireframes')} /> { width='100%' padding='30px' > - - - General - - {error && } - {selectedSection === 'general' && ( <> + + + {selectedSection === 'general' ? 'General' : 'Wireframes'} + + {error && } +
{ } }} error={ - !!generalForm.errors.imageName || - !!generalForm.errors.imageSource + generalForm.touched.imageName && + (!!generalForm.errors.imageName || + !!generalForm.errors.imageSource) } errorMessage={generalForm.errors.imageName} /> @@ -230,13 +252,14 @@ const AddFeature = () => { Type - {!!generalForm.errors.featureType && ( - - - {generalForm.errors.featureType} - - - )} + {!!generalForm.touched.featureType && + generalForm.errors.featureType && ( + + + {generalForm.errors.featureType} + + + )} { )} + {selectedSection === 'wireframes' && ( + <> + + + Wireframes + + {error && } + +
+ + + ) => { + const formData = new FormData(); + + if (event.target.files && event.target.files[0]) { + formData.append('file', event.target.files[0]); + formData.append('upload_preset', 'xofll5kc'); + + const data = await ( + await fetch( + `${process.env.REACT_APP_CLOUDINARY_URL}`, + { + method: 'POST', + body: formData, + } + ) + ).json(); + + const filename = data.original_filename; + const filesource = data.secure_url; + + wireframesForm.setFieldValue('wireframes', [ + ...wireframesForm.values.wireframes, + { name: filename, src: filesource }, + ]); + } + }} + /> + {wireframesForm.values.wireframes.map((image) => ( + { + wireframesForm.setFieldValue( + 'wireframes', + wireframesForm.values.wireframes.filter( + ({ name }) => name !== image.name + ) + ); + }} + /> + ))} + + +