Skip to content

Commit 80d61e2

Browse files
author
Aishwarya Nair
committed
add and link edit view
1 parent da61c2c commit 80d61e2

File tree

6 files changed

+115
-53
lines changed

6 files changed

+115
-53
lines changed

peer-prep/src/Components/QuestionList/Question.jsx

Lines changed: 77 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,60 +3,100 @@ import './Question.css'
33
import delete_icon from '../Assets/bin.png'
44
import edit_icon from '../Assets/pencil.png'
55

6-
export const Question = ({question, i}) => {
6+
export const Question = ({question, i, deleteQuestion, updateQuestion}) => {
77
const [selected, setSelected] = useState(null);
8+
const [title, setTitle] = useState(question.title);
9+
const [difficulty, setDifficulty] = useState(question.complexity);
10+
const [topic, setTopic] = useState(question.category);
11+
const [description, setDescription] = useState(question.description)
12+
813
const toggle = (i) => {
9-
if(selected === i) {
10-
return setSelected(null)
14+
if (!isEdit) {
15+
if(selected === i) {
16+
return setSelected(null)
17+
}
18+
setSelected(i)
1119
}
12-
setSelected(i)
1320
};
21+
const [isEdit, setEdit] = useState(false);
1422
let tagClass = "q-tag";
1523

16-
if(question.difficulty.toLowerCase() === "easy") {
24+
if(question.complexity.toLowerCase() === "easy") {
1725
tagClass += " q-tag-green"
18-
} else if (question.difficulty.toLowerCase() === "medium") {
26+
} else if (question.complexity.toLowerCase() === "medium") {
1927
tagClass += " q-tag-orange"
20-
} else if (question.difficulty.toLowerCase() === "hard"){
28+
} else if (question.complexity.toLowerCase() === "hard"){
2129
tagClass += " q-tag-red"
2230
} else {
2331
tagClass += " q-tag-white"
2432
}
2533
return (
26-
<div className="question-container">
27-
<div className="question">
28-
<div className="q-header" onClick = {() => toggle(i)}>
29-
<div className="q-name">
30-
<div className="q-id">#{question.id}</div>
31-
<div className="q-title">{question.title}</div>
32-
</div>
33-
<span> {selected === i ? "-" : "+"}</span>
34-
</div>
35-
<div className= {selected === i ? "q-content-show": "q-content"}>
36-
<<<<<<< HEAD
37-
<div className="q-tag-container">
38-
<div className="q-tags">
39-
<div className= {tagClass}>{question.difficulty}</div>
40-
<div className="q-tag">{question.topic}</div>
34+
<div className= {isEdit ? "form-container": "question-container"}>
35+
<div className={isEdit ? "container": "question"}>
36+
<div className="q-header" onClick = {() => toggle(i)}>
37+
<div className="q-name">
38+
<div className={isEdit ? "q-form-id": "q-id"}>#{question.id}</div>
39+
{isEdit === true? <input type="text" className="q-form-title q-form-input" defaultValue = {question.title}
40+
onChange = {(e) => {setTitle(e.target.value)}}/> :
41+
<div className="q-title">{question.title}</div>}
4142
</div>
42-
<div className="q-edit">
43-
<img src = {edit_icon} alt=""/>
44-
</div>
45-
=======
46-
<div className="q-tags">
47-
<div className="q-tag">{question.complexity}</div>
48-
<div className="q-tag">{question.category}</div>
49-
>>>>>>> 2d10aa60338d872e3fe12c04076ef7f7dbda4179
43+
<span> {selected === i ? "-" : "+"}</span>
5044
</div>
5145

52-
<div className="q-description">{question.description}</div>
46+
{!isEdit
47+
?
48+
<div className= {selected === i ? "q-content-show": "q-content"}>
49+
<div className="q-tag-container">
50+
<div className={isEdit ? "q-form-tags" : "q-tags"}>
51+
{isEdit === true? <input type="text" className="q-form-tag q-form-input" defaultValue = {question.complexity}
52+
onChange = {(e) => {setDifficulty(e.target.value)}}/> :
53+
<div className= {tagClass}>{question.complexity}</div>}
54+
{isEdit === true? <input type="text" className="q-form-tag q-form-input" defaultValue = {question.category}
55+
onChange = {(e) => {setTopic(e.target.value)}}/> :
56+
<div className="q-tag">{question.category}</div>}
57+
</div>
58+
<div className="q-edit" onClick = {()=> setEdit(true)}>
59+
<img src = {edit_icon} alt=""/>
60+
</div>
61+
</div>
62+
63+
{isEdit === true? <textarea type="text" className="q-form-description q-form-input" defaultValue = {question.description}
64+
onChange = {(e) => {setDescription(e.target.value)}}/> :
65+
<div className="q-description">{question.description}</div>}
66+
67+
{isEdit === true? <button className="submit-btn"
68+
onClick = {(e) => {
69+
setEdit(false);
70+
updateQuestion(question.id, title, description, difficulty, topic)
71+
}}>Submit</button> : <div></div>}
72+
</div>
73+
:
74+
<div className="q-tag-container">
75+
<div className={isEdit ? "q-form-tags" : "q-tags"}>
76+
{isEdit === true? <input type="text" className="q-form-tag q-form-input" defaultValue = {question.complexity}
77+
onChange = {(e) => {setDifficulty(e.target.value)}}/> :
78+
<div className= {tagClass}>{question.complexity}</div>}
79+
{isEdit === true? <input type="text" className="q-form-tag q-form-input" defaultValue = {question.category}
80+
onChange = {(e) => {setTopic(e.target.value)}}/> :
81+
<div className="q-tag">{question.category}</div>}
82+
</div>
83+
</div>}
84+
85+
{isEdit === true? <textarea type="text" className="q-form-description q-form-input" defaultValue = {question.description}
86+
onChange = {(e) => {setDescription(e.target.value)}}/> : null}
87+
88+
{isEdit === true?
89+
<div className="btn-container">
90+
<button className="submit-btn"
91+
onClick = {(e) => {
92+
setEdit(false);
93+
updateQuestion(question.id, title, description, difficulty, topic)
94+
}}>Submit</button> </div> : null}
95+
96+
</div>
97+
<div className="delete-btn" onClick = {(e) => deleteQuestion(i)}>
98+
<img src= {delete_icon} alt="" />
5399
</div>
54-
55-
56-
</div>
57-
<div className="delete-btn">
58-
<img src= {delete_icon} alt="" />
59-
</div>
60100
</div>
61101

62102
)

peer-prep/src/Components/QuestionList/QuestionForm.css

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,22 @@
7272
margin-left: 20px;
7373
}
7474

75+
.btn-container {
76+
display: flex;
77+
gap: 40px;
78+
height: fit-content;
79+
width: fit-content;
80+
margin: auto;
81+
justify-self: center;
82+
}
7583

7684
.submit-btn {
7785
display: flex;
7886
margin: auto;
7987
justify-content: center;
8088
align-items: center;
8189
width: 90px;
82-
height: 130px;
90+
height: 50px;
8391
color: #fff;
8492
background: #52CC65;
8593
border: none;
@@ -88,6 +96,21 @@
8896
cursor: pointer;
8997
}
9098

99+
.cancel-btn {
100+
display: flex;
101+
margin: auto;
102+
justify-content: center;
103+
align-items: center;
104+
width: 90px;
105+
height: 50px;
106+
color: #fff;
107+
background: #bebaba;
108+
border: none;
109+
border-radius: 5px;
110+
font-size: 19px;
111+
cursor: pointer;
112+
}
113+
91114
.ghost-btn img {
92115
width: 40px;
93116
visibility: hidden;

peer-prep/src/Components/QuestionList/QuestionForm.jsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useState } from 'react'
22
import './QuestionForm.css'
33
import delete_icon from '../Assets/bin.png'
44

5-
export const QuestionForm = ({qId, addQuestion, setAddQ}) => {
5+
export const QuestionForm = ({qId, addQuestion, setAddQ, setQId}) => {
66
const [title, setTitle] = useState("");
77
const [difficulty, setDifficulty] = useState("");
88
const [topic, setTopic] = useState("");
@@ -42,8 +42,11 @@ export const QuestionForm = ({qId, addQuestion, setAddQ}) => {
4242
onChange = {
4343
(e) => setDescription(e.target.value)
4444
}/>
45-
46-
<button type = "submit" className="submit-btn">Submit</button>
45+
<div className="btn-container">
46+
<button type = "cancel" className="cancel-btn" onClick = {(e)=> {setAddQ(false); setQId(qId - 1)}}>Cancel</button>
47+
<button type = "submit" className="submit-btn">Submit</button>
48+
</div>
49+
4750
</form>
4851
<div className="ghost-btn">
4952
<img src= {delete_icon} alt=""/>

peer-prep/src/Components/QuestionList/QuestionList.jsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { QuestionForm } from './QuestionForm'
33
import { Question } from './Question'
44
import './QuestionList.css'
55

6-
import QuestionModel from '../../DataModel/Question'
6+
import QuestionModel from '../../DataModel/QuestionModel'
77
import { setupQuestionDatabase, retrieveQuestionDatabase, updateLocalQuestionDatabase } from "../../Utility/localStorage"
88

99
export const Questions = () => {
@@ -14,9 +14,7 @@ export const Questions = () => {
1414
const [qId, setQId] = useState(0);
1515
const [isAddQ, setAddQ] = useState(false);
1616
const [qs, setQs] = useState([])
17-
const toggle = (i) => {
18-
return i
19-
}
17+
2018

2119
// Add a new Question
2220
const addQuestion = (qTitle, qDifficulty, qTopic, qDescription) => {
@@ -64,20 +62,18 @@ export const Questions = () => {
6462
setQs(Array.from(database.database));
6563
setQId(Array.from(database.database).length);
6664
}, [])
67-
68-
useEffect(() => console.log(qs), [qs]);
6965

7066
return (
7167

7268
<div className="q-wrapper">
7369
<div className="accordion">
7470
{qs.map((q, i) => (
75-
<Question key = {q[0]} question = {q[1]} i = {i}/>
71+
<Question key = {q[0]} question = {q[1]} i = {i} deleteQuestion = {deleteQuestion} updateQuestion = {updateQuestion}/>
7672
))}
7773
</div>
7874

7975
{isAddQ === false ? <div></div> :
80-
<QuestionForm qId = {qId} addQuestion = {addQuestion} setAddQ = {setAddQ}/>}
76+
<QuestionForm qId = {qId} addQuestion = {addQuestion} setAddQ = {setAddQ} setQId = {setQId}/>}
8177
<div className="add-q-btn" onClick = {() => {
8278
if (!isAddQ) {
8379
setQId(qId + 1);

peer-prep/src/DataModel/Question.js renamed to peer-prep/src/DataModel/QuestionModel.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// Class that stores and encapsulates the Question and its related fields
22

3-
class Question {
3+
class QuestionModel {
44
constructor(id, title, description, complexity, category) {
55
this.id = id;
66
this.title = title;
@@ -36,4 +36,4 @@ class Question {
3636
}
3737
}
3838

39-
export default Question;
39+
export default QuestionModel;

peer-prep/src/Utility/localStorage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@ function updateLocalQuestionDatabase(updatedDatabase) {
77

88
function retrieveQuestionDatabase() {
99
let questionDatabase = new QuestionDatabase();
10+
console.log(localStorage.getItem("questions"));
1011
questionDatabase.setDatabase(new Map(JSON.parse(localStorage.getItem("questions"))))
11-
1212
return questionDatabase;
1313
}
1414

1515
function setupQuestionDatabase() {
1616
var data = localStorage.getItem("questions");
1717

1818
if(!data) {
19-
localStorage.setItem("questions", new QuestionDatabase())
19+
localStorage.setItem("questions", JSON.stringify([]))
2020
};
2121
}
2222

0 commit comments

Comments
 (0)