Showing
4 changed files
with
116 additions
and
190 deletions
| 1 | -import React, { useEffect } from 'react'; | 1 | +import React from "react"; |
| 2 | -import './Card.scss'; | 2 | +import styled, { css } from "styled-components"; |
| 3 | 3 | ||
| 4 | -function Card({question,answer,setAnswer,curIdx,setCurIdx}){ | 4 | +function Card({ question, answer, setAnswer, curIdx, setCurIdx }) { |
| 5 | - // type: true false | 5 | + const CardWrap = styled.div` |
| 6 | - const onClickOne=()=>{ | 6 | + display: flex; |
| 7 | - const temp = [ | 7 | + flex-direction: column; |
| 8 | - ...answer,{ | 8 | + align-items: center; |
| 9 | - num: question.num, | 9 | + min-width: 500px; |
| 10 | - choice: 0 | 10 | + height: 100%; |
| 11 | - }]; | 11 | + font-size: 20px; |
| 12 | - setAnswer(temp); | 12 | + font-weight: bold; |
| 13 | - setCurIdx(curIdx+1); | 13 | + /* ${(props) => css` |
| 14 | - } | 14 | + transform: translateX(${-500 * props.curIdx}px); |
| 15 | - const onClickTwo=()=>{ | 15 | + transition: 0.5s; |
| 16 | - const temp = [ | 16 | + `} */ |
| 17 | - ...answer,{ | 17 | + `; |
| 18 | - num: question.num, | 18 | + |
| 19 | - choice: 1 | 19 | + const CardQuest = styled.div` |
| 20 | - }]; | 20 | + font-size: 20px; |
| 21 | - setAnswer(temp); | 21 | + font-weight: bold; |
| 22 | - setCurIdx(curIdx+1); | 22 | + margin-bottom: 60px; |
| 23 | - } | 23 | + `; |
| 24 | - return( | 24 | + |
| 25 | - <> | 25 | + const CardContent = styled.div` |
| 26 | - <div className="card"> | 26 | + cursor: pointer; |
| 27 | - <div className="card__desc">{question.question}</div> | 27 | + width: 300px; |
| 28 | - <div className="card__content" onClick={onClickOne}>{question.answer1}</div> | 28 | + height: 60px; |
| 29 | - <div className="card__content" onClick={onClickTwo}>{question.answer2}</div> | 29 | + margin: 10px; |
| 30 | - </div> | 30 | + font-size: 16px; |
| 31 | - </> | 31 | + border-radius: 10px; |
| 32 | - ); | 32 | + color: #ffffff; |
| 33 | + background-color: #536349; | ||
| 34 | + display: flex; | ||
| 35 | + justify-content: center; | ||
| 36 | + align-items: center; | ||
| 37 | + `; | ||
| 38 | + | ||
| 39 | + const onClickOne = () => { | ||
| 40 | + const temp = [ | ||
| 41 | + ...answer, | ||
| 42 | + { | ||
| 43 | + num: question.num, | ||
| 44 | + choice: 0, | ||
| 45 | + }, | ||
| 46 | + ]; | ||
| 47 | + setAnswer(temp); | ||
| 48 | + setCurIdx(curIdx + 1); | ||
| 49 | + }; | ||
| 50 | + const onClickTwo = () => { | ||
| 51 | + const temp = [ | ||
| 52 | + ...answer, | ||
| 53 | + { | ||
| 54 | + num: question.num, | ||
| 55 | + choice: 1, | ||
| 56 | + }, | ||
| 57 | + ]; | ||
| 58 | + setAnswer(temp); | ||
| 59 | + setCurIdx(curIdx + 1); | ||
| 60 | + }; | ||
| 61 | + | ||
| 62 | + return ( | ||
| 63 | + <> | ||
| 64 | + <CardWrap curIdx={curIdx}> | ||
| 65 | + <CardQuest>{question.question}</CardQuest> | ||
| 66 | + <CardContent onClick={onClickOne}>{question.answer1}</CardContent> | ||
| 67 | + <CardContent onClick={onClickTwo}>{question.answer2}</CardContent> | ||
| 68 | + </CardWrap> | ||
| 69 | + </> | ||
| 70 | + ); | ||
| 33 | } | 71 | } |
| 34 | // 나중에 데이터 넘어오면 넘어온 데이터로 카드 업데이트 | 72 | // 나중에 데이터 넘어오면 넘어온 데이터로 카드 업데이트 |
| 35 | 73 | ||
| 36 | -export default Card; | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 74 | +export default Card; | ... | ... |
| 1 | -.card{ | ||
| 2 | - display: flex; | ||
| 3 | - flex-direction: column; | ||
| 4 | - align-items: center; | ||
| 5 | - width: 30rem; | ||
| 6 | - font-size: 2rem; | ||
| 7 | - font-weight: bold; | ||
| 8 | - | ||
| 9 | - &__desc{ | ||
| 10 | - font-size: 2rem; | ||
| 11 | - font-weight: bold; | ||
| 12 | - margin-bottom: 6rem; | ||
| 13 | - } | ||
| 14 | - | ||
| 15 | - &__content{ | ||
| 16 | - cursor: pointer; | ||
| 17 | - width: 25rem; | ||
| 18 | - height: 5rem; | ||
| 19 | - margin: 1rem; | ||
| 20 | - font-size: 1rem; | ||
| 21 | - border-radius: 1rem; | ||
| 22 | - color: #ffffff; | ||
| 23 | - background-color: #536349; | ||
| 24 | - display: flex; | ||
| 25 | - justify-content: center; | ||
| 26 | - align-items: center; | ||
| 27 | - } | ||
| 28 | -} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | -import React, { useState, useEffect } from "react"; | 1 | +import React, { useState } from "react"; |
| 2 | import Card from "../components/card/Card"; | 2 | import Card from "../components/card/Card"; |
| 3 | import ProgressBar from "../components/progressbar/ProgressBar"; | 3 | import ProgressBar from "../components/progressbar/ProgressBar"; |
| 4 | -import axios from 'axios'; | 4 | +import "antd/dist/antd.css"; |
| 5 | -import "./SurveyPage.scss"; | ||
| 6 | -import 'antd/dist/antd.css' | ||
| 7 | -// import redux | ||
| 8 | -import {useDispatch,useSelector} from 'react-redux'; | ||
| 9 | -import {getResult,getResultSuccess,getResultError} from '../store/action/result'; | ||
| 10 | -import {getSurvey,getSurveySuccess,getSurveyError} from '../store/action/survey'; | ||
| 11 | -import ResultPage from "./ResultPage"; | ||
| 12 | -// import styled,{css} from 'styled-components'; | ||
| 13 | 5 | ||
| 14 | -// const Slider = styled.div` | 6 | +import styled, { css } from "styled-components"; |
| 15 | -// border: 1px solid gray; | ||
| 16 | -// width: 30rem; | ||
| 17 | -// display: flex; | ||
| 18 | -// align-items: center; | ||
| 19 | -// margin: 0 auto; | ||
| 20 | -// transform: translateX(${-30}rem); | ||
| 21 | -// transition: 0.5s | ||
| 22 | -// overflow: hidden; | ||
| 23 | -// `; | ||
| 24 | 7 | ||
| 25 | -function SurveyPage({history}) { | 8 | +const SurveyContainer = styled.div` |
| 26 | - const [curIdx, setCurIdx] = useState(0); | 9 | + display: flex; |
| 27 | - const [question, setQuestion] = useState(JSON.parse(localStorage.getItem('question')||'{}')); | 10 | + justify-content: center; |
| 28 | - const [answer, setAnswer] = useState([]); | 11 | +`; |
| 29 | - const dispatch = useDispatch(); | 12 | + |
| 13 | +const Container = styled.div` | ||
| 14 | + border: solid 1px red; | ||
| 15 | + width: 500px; | ||
| 16 | + height: 100vh; | ||
| 17 | + overflow: hidden; | ||
| 18 | +`; | ||
| 30 | 19 | ||
| 31 | - const data = useSelector(state=>state.survey.data); | 20 | +const SliderCotainer = styled.div` |
| 32 | - // useEffect(()=>{ | 21 | + border: 1px solid gray; |
| 33 | - // const getApi = async() =>{ | 22 | + width: 100%; |
| 34 | - // dispatch(getSurvey()); | 23 | + display: flex; |
| 35 | - // try{ | 24 | + align-items: center; |
| 36 | - // const {data} = await axios.get("getquestions"); | 25 | + margin: 0 auto; |
| 37 | - // setQuestion(data); | 26 | + ${(props) => css` |
| 38 | - // dispatch(getSurveySuccess(data)); | 27 | + transform: translateX(${-500 * props.curIdx}px); |
| 39 | - // }catch(e){ | 28 | + transition: 0.5s; |
| 40 | - // dispatch(getSurveyError(e)); | 29 | + `} |
| 41 | - // } | 30 | +`; |
| 42 | - // } | ||
| 43 | - // getApi(); | ||
| 44 | - // },[]); | ||
| 45 | 31 | ||
| 46 | - useEffect(()=>{ | 32 | +function SurveyPage({ history, question }) { |
| 47 | - console.log(curIdx); | 33 | + const [curIdx, setCurIdx] = useState(0); |
| 48 | - if(curIdx === 10){ | 34 | + const [answer, setAnswer] = useState([]); // post로 보낼 state |
| 49 | - // setCurIdx(curIdx-1); | ||
| 50 | - const postApi = async ()=>{ | ||
| 51 | - dispatch(getResult()); | ||
| 52 | - try{ | ||
| 53 | - const {data} = await axios.post("submit", answer); | ||
| 54 | - console.log(data); | ||
| 55 | - dispatch(getResultSuccess(data)); | ||
| 56 | - }catch(e){ | ||
| 57 | - dispatch(getResultError(e)); | ||
| 58 | - } | ||
| 59 | - } | ||
| 60 | - postApi(); | ||
| 61 | - history.push('/result'); | ||
| 62 | - } | ||
| 63 | - },[curIdx]); | ||
| 64 | 35 | ||
| 65 | return ( | 36 | return ( |
| 66 | - <div className="container"> | 37 | + <SurveyContainer> |
| 67 | - <div className="container__progress"></div> | 38 | + <Container> |
| 68 | - <div className="slider"> | 39 | + {/* 상태바 넣기 */} |
| 69 | - { | 40 | + <SliderCotainer curIdx={curIdx}> |
| 70 | - curIdx === 11? history.push('/result') :(<Card | 41 | + {/* 얘가 슬라이더 컨테이너 */} |
| 71 | - question={question[curIdx]} | 42 | + {question.map((question) => ( |
| 72 | - answer={answer} | 43 | + <Card |
| 73 | - setAnswer={setAnswer} | 44 | + key={question.num} |
| 74 | - curIdx={curIdx} | 45 | + question={question} |
| 75 | - setCurIdx={setCurIdx} | 46 | + answer={answer} |
| 76 | - />) | 47 | + setAnswer={setAnswer} |
| 77 | - } | 48 | + curIdx={curIdx} |
| 78 | - </div> | 49 | + setCurIdx={setCurIdx} |
| 79 | - </div> | 50 | + /> |
| 51 | + ))} | ||
| 52 | + </SliderCotainer> | ||
| 53 | + </Container> | ||
| 54 | + </SurveyContainer> | ||
| 80 | ); | 55 | ); |
| 81 | } | 56 | } |
| 82 | 57 | ||
| 83 | export default SurveyPage; | 58 | export default SurveyPage; |
| 84 | - | ||
| 85 | -// {/* <Slider> */} | ||
| 86 | -// {question && question.map((question,index) => ( | ||
| 87 | -// <div className="slider__wrapper"> | ||
| 88 | -// {/* <ProgressBar percent={curIdx*10} /> */} | ||
| 89 | -// <Card | ||
| 90 | -// key={question.num} | ||
| 91 | -// question={question} | ||
| 92 | -// answer={answer} | ||
| 93 | -// setAnswer={setAnswer} | ||
| 94 | -// curIdx={curIdx} | ||
| 95 | -// setCurIdx={setCurIdx} | ||
| 96 | -// style={{ | ||
| 97 | -// transform: `translate3d(${(-30)*curIdx}rem,0,0)`, | ||
| 98 | -// transition: "0.5s", | ||
| 99 | -// }} | ||
| 100 | -// /> | ||
| 101 | -// </div> | ||
| 102 | -// ))} | ||
| 103 | -// {/* </Slider> */} | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
src/pages/SurveyPage.scss
deleted
100644 → 0
| 1 | -.container{ | ||
| 2 | - display: flex; | ||
| 3 | - flex-direction: column; | ||
| 4 | - justify-content: center; | ||
| 5 | - align-items: center; | ||
| 6 | - margin-top: 10rem; | ||
| 7 | - | ||
| 8 | - &__progress{ | ||
| 9 | - margin-bottom: 3rem; | ||
| 10 | - } | ||
| 11 | -} | ||
| 12 | - | ||
| 13 | -.slider{ | ||
| 14 | - // border: 1px solid gray; | ||
| 15 | - width: 30rem; | ||
| 16 | - display: flex; | ||
| 17 | - align-items: center; | ||
| 18 | - margin: 0 auto; | ||
| 19 | - overflow: hidden; | ||
| 20 | - | ||
| 21 | - &__wrapper{ | ||
| 22 | - width: 30rem; | ||
| 23 | - } | ||
| 24 | - &__desc{ | ||
| 25 | - font-size: 2rem; | ||
| 26 | - font-weight: bold; | ||
| 27 | - margin-bottom: 2rem; | ||
| 28 | - } | ||
| 29 | -} | ||
| 30 | - | ||
| 31 | -// .slider__wrapper{ | ||
| 32 | -// // border: 1px solid red; | ||
| 33 | -// width: 30rem; | ||
| 34 | -// } | ||
| 35 | -// .slider__desc{ | ||
| 36 | -// font-size: 2rem; | ||
| 37 | -// font-weight: bold; | ||
| 38 | -// margin-bottom: 2rem; | ||
| 39 | -// } | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment