Skip to content

Commit 94453b7

Browse files
authored
Create events (#79)
* Initial commit * Complete eventForm with image upload * Store images into specific user * Make cancel btn working * Format file * Update
1 parent a633d52 commit 94453b7

File tree

1 file changed

+123
-34
lines changed

1 file changed

+123
-34
lines changed

src/components/CreateNewEvent.js

Lines changed: 123 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect } from 'react';
1+
import React, { useState } from 'react';
22
import { makeStyles } from '@material-ui/styles';
33
import DrawerLayout from 'src/layouts/DrawerLayout';
44
import {
@@ -7,9 +7,13 @@ import {
77
Box,
88
Typography,
99
InputBase,
10-
TextField
10+
TextField,
11+
LinearProgress
1112
} from '@material-ui/core';
1213
import ImageUploader from 'react-images-upload';
14+
import { useSelector } from 'react-redux';
15+
import { firebase } from 'src/services/authService';
16+
import { useHistory } from 'react-router';
1317

1418
const useStyles = makeStyles(theme => ({
1519
root: {
@@ -40,7 +44,7 @@ const useStyles = makeStyles(theme => ({
4044
width: '200px',
4145
height: '38px',
4246
borderRadius: '20px',
43-
marginRight: '15px'
47+
marginRight: '15px',
4448
},
4549
createbtn: {
4650
marginTop: '60px',
@@ -56,7 +60,7 @@ const useStyles = makeStyles(theme => ({
5660
width: '200px',
5761
height: '38px',
5862
borderRadius: '20px',
59-
marginRight: '60px'
63+
marginRight: '60px',
6064
},
6165
inputDiv: {
6266
background: 'rgba(42, 23, 89, 0.25)',
@@ -193,18 +197,74 @@ const useStyles = makeStyles(theme => ({
193197

194198
function CreateNewEvent() {
195199
const classes = useStyles();
196-
197-
// file upload
200+
let history = useHistory();
201+
const user = useSelector(state => state.account.user);
202+
const [speaker, setSpeaker] = useState([{}]);
203+
const [imageURL, setImageURL] = useState('');
204+
const initialFieldValues = {
205+
eventName: '',
206+
description: '',
207+
date: '',
208+
time: '',
209+
eventLink: ''
210+
};
211+
const [formData, setFormData] = useState(initialFieldValues);
198212

199213
const handleChange = e => {
200-
// let selectedFile = e.target.files[0];
214+
let { name, value } = e.target;
215+
setFormData({ ...formData, [name]: value });
201216
};
202217

203-
function onDrop(picture) {
204-
console.log(picture);
205-
}
218+
const handleSpeakerChange = e => {
219+
let { id, name, value } = e.target;
220+
let s = [...speaker];
221+
s[parseInt(id)][name] = value;
222+
setSpeaker(s);
223+
};
224+
225+
const addSpeaker = () => {
226+
setSpeaker([...speaker, {}]);
227+
};
228+
229+
const removeSpeaker = () => {
230+
speaker.pop();
231+
setSpeaker([...speaker]);
232+
};
233+
234+
const onDrop = async picture => {
235+
if (picture.length === 0) return;
236+
// For the Loader
237+
setImageURL(null);
238+
let userId = user.uid;
239+
let file = picture[0];
240+
let storageRef = firebase.storage().ref();
241+
let fileRef = storageRef.child(`${userId}/${file.name}`);
242+
await fileRef.put(file);
243+
setImageURL(await fileRef.getDownloadURL());
244+
};
245+
246+
const handleSubmit = () => {
247+
let userId = user.uid;
248+
formData.speakers = speaker;
249+
formData.createdBy = userId;
250+
formData.bannerImg = imageURL;
251+
252+
let db = firebase.firestore();
253+
let ref = db.collection('events');
254+
255+
ref
256+
.add(formData)
257+
.then(() => {
258+
console.log('Document written');
259+
setFormData(initialFieldValues);
260+
setSpeaker([{}]);
261+
history.push('/events/individual-event');
262+
})
263+
.catch(error => {
264+
console.error('Error adding document: ', error);
265+
});
266+
};
206267

207-
useEffect(() => {}, []);
208268
return (
209269
<DrawerLayout>
210270
<div className={classes.root}>
@@ -224,7 +284,7 @@ function CreateNewEvent() {
224284
className={classes.textField}
225285
fullWidth
226286
name="eventName"
227-
type="eventName"
287+
value={formData.eventName}
228288
variant="outlined"
229289
onChange={handleChange}
230290
/>
@@ -233,9 +293,10 @@ function CreateNewEvent() {
233293
placeholder="Add Description of the event"
234294
className={classes.textField}
235295
multiline
296+
rows={4}
236297
fullWidth
237-
name="email"
238-
type="email"
298+
name="description"
299+
value={formData.description}
239300
variant="outlined"
240301
onChange={handleChange}
241302
/>
@@ -246,7 +307,10 @@ function CreateNewEvent() {
246307
id="date"
247308
type="date"
248309
defaultValue="2017-05-24"
310+
name="date"
311+
value={formData.date}
249312
className={classes.date}
313+
onChange={handleChange}
250314
InputLabelProps={{
251315
shrink: true
252316
}}
@@ -257,9 +321,9 @@ function CreateNewEvent() {
257321
<TextField
258322
fullWidth
259323
className={classes.input1}
260-
placeholder="Event Time"
261-
name="time"
262324
type="time"
325+
name="time"
326+
value={formData.time}
263327
id="time"
264328
defaultValue="07:30"
265329
variant="outlined"
@@ -272,39 +336,63 @@ function CreateNewEvent() {
272336
fullWidth
273337
className={classes.textField}
274338
placeholder="Event link / Registration link"
275-
name="link"
276-
type="link"
339+
name="eventLink"
340+
value={formData.eventLink}
277341
variant="outlined"
278342
onChange={handleChange}
279343
/>
280-
<fieldset className={classes.socialLinks}>
281-
<InputBase
282-
className={classes.social}
283-
fullWidth
284-
placeholder="Speaker Name"
285-
/>
286-
<InputBase
287-
className={classes.social}
288-
fullWidth
289-
placeholder="Speaker LinkedIn Profile Link"
290-
/>
291-
</fieldset>
344+
{speaker.map((item, idx) => (
345+
<fieldset className={classes.socialLinks}>
346+
<InputBase
347+
className={classes.social}
348+
fullWidth
349+
id={idx.toString()}
350+
name="speakerName"
351+
value={speaker.speakerName}
352+
placeholder="Speaker Name"
353+
onChange={handleSpeakerChange}
354+
/>
355+
<InputBase
356+
className={classes.social}
357+
fullWidth
358+
id={idx.toString()}
359+
name="speakerLinkedIn"
360+
value={speaker.speakerLinkedIn}
361+
placeholder="Speaker LinkedIn Profile Link"
362+
onChange={handleSpeakerChange}
363+
/>
364+
</fieldset>
365+
))}
292366

293-
<Button className={classes.button}>Add Speaker</Button>
367+
{speaker.length > 1 && (
368+
<Button className={classes.button} onClick={removeSpeaker}>
369+
Remove Speaker
370+
</Button>
371+
)}
372+
<Button className={classes.button} onClick={addSpeaker}>
373+
Add Speaker
374+
</Button>
294375
{/* </div> */}
295376
</Grid>
296377
</Grid>
297378
<div className={classes.createbtn}>
298-
<Button className={classes.cancelbtn}>Cancel</Button>
299-
<Button className={classes.addbtn}>Create</Button>
379+
<Button
380+
className={classes.cancelbtn}
381+
onClick={() => history.push('/events')}
382+
>
383+
Cancel
384+
</Button>
385+
<Button className={classes.addbtn} onClick={handleSubmit}>
386+
Create
387+
</Button>
300388
</div>
301389
</Box>
302390
<Box maxWidth="28em" minWidth="24em" className={classes.paddingRight}>
303391
<ImageUploader
304392
withIcon={true}
305393
buttonText="Choose image"
306394
onChange={onDrop}
307-
withPreview
395+
withPreview={imageURL !== null}
308396
singleImage
309397
imgExtension={['.jpg', '.gif', '.png', '.gif']}
310398
maxFileSize={5242880}
@@ -313,6 +401,7 @@ function CreateNewEvent() {
313401
}}
314402
className={classes.imagePreview}
315403
/>
404+
{imageURL === null && <LinearProgress aria-label="Uploading" />}
316405
<img
317406
src="/static/images/event_img.svg"
318407
alt="gallery-icon"

0 commit comments

Comments
 (0)