in frontend/src/addQuestion/AddQuestionModal.js [17:121]
function AddQuestionModal({
onHideModal
}) {
const [,questionDispatch] = React.useContext(QuestionContext);
const [,voteDispatch] = React.useContext(VoteContext);
const { channelArn } = React.useContext(IVSContext);
const [{ accessJWTToken }] = React.useContext(UserContext);
const [isPosting, setIsPosting] = React.useState(false);
const [textInput, setTextInput] = React.useState('');
const modalRef = React.useRef(null);
useOutsideClick(modalRef, onHideModal);
React.useEffect(() => {
if (isPosting) {
const postAddQuestion = async () => {
try {
const questionResponse = await fetch(ADD_QUESTION_ENDPOINT, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': accessJWTToken,
},
body: JSON.stringify({
channelArn,
question: textInput,
}),
});
if (questionResponse.status === 200) {
const { id } = await questionResponse.json();
questionDispatch({
type: CLIENT_ADD_QUESTION_ACTION,
id,
content: textInput,
});
const voteResponse = await fetch(ADD_VOTE_ENDPOINT, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': accessJWTToken,
},
body: JSON.stringify({
channelArn,
questionId: id,
}),
});
if (voteResponse.status === 200) {
questionDispatch({
type: CLIENT_INCREMENT_VOTE_ACTION,
id,
});
voteDispatch({
type: ADD_VOTE_ACTION,
questionId: id,
});
}
} else {
throw new Error();
}
} catch (e){
console.log('Failure in adding and voting new question', e);
}
onHideModal();
};
postAddQuestion();
}
// eslint-disable-next-line
}, [isPosting]);
return (
<div className="modal">
<div className="modal__el" ref={modalRef}>
<div className="modal_icon" onClick={onHideModal}>
<img src="/close_icon.svg" />
</div>
<h2 className="mg-b-1">Submit a question</h2>
<form>
<fieldset>
<textarea
rows={'8'}
placeholder={'Type here...'}
onChange={e => setTextInput(e.target.value)}
disabled={isPosting}
value={textInput}
/>
<p><em>Submissions are anonymous</em></p>
<button
type={'submit'}
className="btn btn--primary mg-t-1"
onClick={e => {
e.preventDefault();
setIsPosting(true)
}}
>
Submit
</button>
</fieldset>
</form>
</div>
<div className="modal__overlay"></div>
</div>
)
}