From fa383c34dd134109e614d210c55a34b3c8f7b5e9 Mon Sep 17 00:00:00 2001
From: Emil Wahlqvist <emiwa210@student.liu.se>
Date: Fri, 2 Apr 2021 17:47:48 +0000
Subject: [PATCH] Resolve "Add presentation slide settings"

---
 .../components/SettingsPanel.tsx              |   3 +-
 .../components/SlideSettings.test.tsx         |   7 +
 .../components/SlideSettings.tsx              | 191 ++++++++++++++++++
 3 files changed, 200 insertions(+), 1 deletion(-)
 create mode 100644 client/src/pages/presentationEditor/components/SlideSettings.test.tsx
 create mode 100644 client/src/pages/presentationEditor/components/SlideSettings.tsx

diff --git a/client/src/pages/presentationEditor/components/SettingsPanel.tsx b/client/src/pages/presentationEditor/components/SettingsPanel.tsx
index 1eb1b40e..97301c25 100644
--- a/client/src/pages/presentationEditor/components/SettingsPanel.tsx
+++ b/client/src/pages/presentationEditor/components/SettingsPanel.tsx
@@ -2,6 +2,7 @@ import { Tabs } from '@material-ui/core'
 import AppBar from '@material-ui/core/AppBar'
 import React from 'react'
 import CompetitionSettings from './CompetitionSettings'
+import SlideSettings from './SlideSettings'
 import { SettingsTab } from './styled'
 
 interface TabPanelProps {
@@ -13,7 +14,7 @@ function TabContent(props: TabPanelProps) {
   if (activeTab === 0) {
     return <CompetitionSettings />
   } else if (activeTab === 1) {
-    return <div>2</div>
+    return <SlideSettings />
   }
   return <div>3</div>
 }
diff --git a/client/src/pages/presentationEditor/components/SlideSettings.test.tsx b/client/src/pages/presentationEditor/components/SlideSettings.test.tsx
new file mode 100644
index 00000000..4099e130
--- /dev/null
+++ b/client/src/pages/presentationEditor/components/SlideSettings.test.tsx
@@ -0,0 +1,7 @@
+import { render } from '@testing-library/react'
+import React from 'react'
+import SlideSettings from './SlideSettings'
+
+it('renders slide settings', () => {
+  render(<SlideSettings />)
+})
diff --git a/client/src/pages/presentationEditor/components/SlideSettings.tsx b/client/src/pages/presentationEditor/components/SlideSettings.tsx
new file mode 100644
index 00000000..9441f908
--- /dev/null
+++ b/client/src/pages/presentationEditor/components/SlideSettings.tsx
@@ -0,0 +1,191 @@
+import {
+  Button,
+  Checkbox,
+  Divider,
+  FormControl,
+  Grid,
+  InputLabel,
+  List,
+  ListItem,
+  ListItemText,
+  MenuItem,
+  Select,
+  TextField,
+  Typography,
+} from '@material-ui/core'
+import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'
+import CloseIcon from '@material-ui/icons/Close'
+import MoreHorizOutlinedIcon from '@material-ui/icons/MoreHorizOutlined'
+import React, { useState } from 'react'
+
+const useStyles = makeStyles((theme: Theme) =>
+  createStyles({
+    textInputContainer: {
+      '& > *': {
+        margin: theme.spacing(1),
+        width: '100%',
+      },
+    },
+    textInput: {
+      margin: theme.spacing(2),
+      width: '87%',
+    },
+    textCenter: {
+      textAlign: 'center',
+    },
+    center: {
+      display: 'flex',
+      justifyContent: 'center',
+    },
+    slideTypeSelection: {
+      margin: theme.spacing(2),
+      width: '87%',
+    },
+    clickableIcon: {
+      cursor: 'pointer',
+    },
+    importedImage: {
+      width: 70,
+      height: 50,
+    },
+  })
+)
+
+const SlideSettings: React.FC = () => {
+  const classes = useStyles()
+
+  const [slideTypeSelected, selectSlideType] = React.useState('')
+  const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {
+    selectSlideType(event.target.value as string)
+  }
+
+  const answerList = [
+    { id: 'answer1', name: 'Svar 1' },
+    { id: 'answer2', name: 'Svar 2' },
+  ]
+  const handleCloseAnswerClick = (id: string) => {
+    setAnswers(answers.filter((item) => item.id !== id)) //Will not be done like this when api is used
+  }
+  const [answers, setAnswers] = useState(answerList)
+
+  const textList = [
+    { id: 'text1', name: 'Text 1' },
+    { id: 'text2', name: 'Text 2' },
+  ]
+  const handleCloseTextClick = (id: string) => {
+    setTexts(texts.filter((item) => item.id !== id)) //Will not be done like this when api is used
+  }
+  const [texts, setTexts] = useState(textList)
+
+  const pictureList = [
+    { id: 'picture1', name: 'Picture1.jpeg' },
+    { id: 'picture2', name: 'Picture2.jpeg' },
+  ]
+  const handleClosePictureClick = (id: string) => {
+    setPictures(pictures.filter((item) => item.id !== id)) //Will not be done like this when api is used
+  }
+  const [pictures, setPictures] = useState(pictureList)
+
+  return (
+    <div className={classes.textInputContainer}>
+      <FormControl variant="outlined" className={classes.slideTypeSelection}>
+        <InputLabel id="slide-type-selection-label">Sidtyp</InputLabel>
+        <Select value={slideTypeSelected} label="Sidtyp" defaultValue="informationSlide" onChange={handleChange}>
+          <MenuItem value="informationSlide">
+            <Button>Informationssida</Button>
+          </MenuItem>
+          <MenuItem value="textQuestion">
+            <Button>Skriftlig fråga</Button>
+          </MenuItem>
+          <MenuItem value="practicalQuestion">
+            <Button>Praktisk fråga</Button>
+          </MenuItem>
+          <MenuItem value="multipleChoiceQuestion">
+            <Button>Flervalsfråga</Button>
+          </MenuItem>
+        </Select>
+      </FormControl>
+      <Divider />
+
+      <Grid container spacing={0} justify="space-evenly" alignItems="center">
+        <Grid item>
+          <Typography variant="subtitle2">Timer (s):</Typography>
+        </Grid>
+        <Divider orientation="vertical" flexItem />
+        <Grid item>
+          <TextField margin="dense" id="outlined-basic" label="Antal sekunder" variant="outlined" />
+        </Grid>
+      </Grid>
+      <Divider />
+
+      <List>
+        <Divider />
+        <ListItem>
+          <ListItemText
+            className={classes.textCenter}
+            primary="Svarsalternativ"
+            secondary="(Fyll i rutan höger om textfältet för att markera korrekt svar)"
+          />
+        </ListItem>
+        {answers.map((answer) => (
+          <div key={answer.id}>
+            <ListItem divider>
+              <TextField className={classes.textInput} id="outlined-basic" label={answer.name} variant="outlined" />
+              <Checkbox color="default" />
+              <CloseIcon className={classes.clickableIcon} onClick={() => handleCloseAnswerClick(answer.id)} />
+            </ListItem>
+          </div>
+        ))}
+        <ListItem className={classes.center} button>
+          <Button>Lägg till svarsalternativ</Button>
+        </ListItem>
+      </List>
+      <Divider />
+
+      <List>
+        <Divider />
+        <ListItem>
+          <ListItemText className={classes.textCenter} primary="Text" />
+        </ListItem>
+        {texts.map((text) => (
+          <div key={text.id}>
+            <ListItem divider>
+              <TextField className={classes.textInput} id="outlined-basic" label={text.name} variant="outlined" />
+              <MoreHorizOutlinedIcon className={classes.clickableIcon} />
+              <CloseIcon className={classes.clickableIcon} onClick={() => handleCloseTextClick(text.id)} />
+            </ListItem>
+          </div>
+        ))}
+        <ListItem className={classes.center} button>
+          <Button>Lägg till text</Button>
+        </ListItem>
+      </List>
+      <Divider />
+
+      <List>
+        <Divider />
+        <ListItem>
+          <ListItemText className={classes.textCenter} primary="Bilder" />
+        </ListItem>
+        {pictures.map((picture) => (
+          <div key={picture.id}>
+            <ListItem divider button>
+              <img
+                id="temp source, todo: add image source to elements of pictureList"
+                src="https://i1.wp.com/stickoutmedia.se/wp-content/uploads/2021/01/placeholder-3.png?ssl=1"
+                className={classes.importedImage}
+              />
+              <ListItemText className={classes.textCenter} primary={picture.name} />
+              <CloseIcon onClick={() => handleClosePictureClick(picture.id)} />
+            </ListItem>
+          </div>
+        ))}
+        <ListItem className={classes.center} button>
+          <Button>Lägg till bild</Button>
+        </ListItem>
+      </List>
+    </div>
+  )
+}
+
+export default SlideSettings
-- 
GitLab