Skip to content
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
52 changes: 52 additions & 0 deletions src/.github/workflows/node.js.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Node.js CI

on:
push:
branches: [main]

jobs:
build:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [16.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: "npm"
- id: get-repo-values
run: |
url=https://$(echo "${{github.repository}}" | sed "s/\//.github.io\//")
echo "::set-output name=url::$url"
- name: Update package.json homepage
uses: jossef/action-set-json-field@v1
with:
file: package.json
field: homepage
value: ${{ steps.get-repo-values.outputs.url }}
- run: npm ci
- run: npm run lint
- run: npm run test -- --coverage |& tee ./public/test_report.txt
- run: echo "<html><head><meta http-equiv='refresh' content='0; URL=${{github.server_url}}/${{github.repository}}' /></head><body>Redirecting to repository</body></html>" > ./public/github.html
- run: npm run build --if-present

- name: Deploy
run: |
git config --global user.name ${user_name}
git config --global user.email ${user_email}
git remote set-url origin https://${github_token}@github.com/${repository}
npm run deploy
env:
user_name: "github-actions[bot]"
user_email: "github-actions[bot]@users.noreply.github.com"
github_token: ${{ secrets.GH_TOKEN }}
repository: ${{ github.repository }}
26 changes: 15 additions & 11 deletions src/quizzer/AddQuizModal.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,27 @@
import React, { useState } from "react";
import { Button, Modal, Form } from "react-bootstrap";

export const AddQuizModal = ({
export function AddQuizModal ({
show,
handleClose,
handleCloseModal,
addQuiz
}: {
}) => {
show: boolean,
handleCloseModal: () => void,
addQuiz: (title: string, body: string) => void,
}) {
const [title, setTitle] = useState<string>("Example Quiz");
const [body, setBody] = useState<string>("Example Description");

const saveChanges = () => {
// setTitle("Example Quiz");
// setBody("Example Description");
addQuiz(title, body);
setTitle("Example Quiz");
setBody("Example Description");
handleClose();
handleCloseModal();
};

return (
<div>
<Modal show={show} onHide={handleClose} animation={false}>
<Modal show={show} onHide={handleCloseModal} animation={false}>
<Modal.Header closeButton>
<Modal.Title>Add New Quiz</Modal.Title>
</Modal.Header>
Expand All @@ -36,7 +39,9 @@ export const AddQuizModal = ({
as="textarea"
rows={3}
value={body}
onChange={}
onChange={(
e: React.ChangeEvent<HTMLInputElement>
) => setBody(e.target.value)}
></Form.Control>
</Form.Group>
</Modal.Body>
Expand All @@ -46,7 +51,7 @@ export const AddQuizModal = ({
onClick={() => {
setTitle("Example Quiz");
setBody("Example Description");
handleClose();
handleCloseModal();
}}
>
Close
Expand All @@ -56,6 +61,5 @@ export const AddQuizModal = ({
</Button>
</Modal.Footer>
</Modal>
</div>
);
};
23 changes: 14 additions & 9 deletions src/quizzer/QuestionEdit.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
import React, { useState } from "react";
import { Question, QuestionType } from "../interfaces/question";
import { Question } from "../interfaces/question";
import { Button, Form } from "react-bootstrap"

import "./QuestionEdit.css";

export const QuestionEdit = ({
export function QuestionEdit ({
index,
lastIndex,
question,
editQuestion,
removeQuestion,
swapQuestion
}: {}) => {
}: { index: number,
lastIndex: number,
question: Question,
editQuestion: (questionId: number, newQuestion: Question) => void,
removeQuestion: (id: number) => void
swapQuestion: (idx1: number, idx2: number) => void;
}): JSX.Element {
const [a, b] = useState<number>(
question.options.findIndex((s: string) => question.expected === s)
);
Expand All @@ -27,19 +32,19 @@ export const QuestionEdit = ({
});
};

const switchMulti = () => {
const handleSwitch = () => {
b(0);
editQuestion(question.id, {
...question,
type: "multiple_choice_question",
type: question.type === "multiple_choice_question" ? "short_answer_question" : "multiple_choice_question",
expected: "Example Answer",
options: Array(3).fill("Example Answer")
});
};

const handlePoints = (e: React.ChangeEvent<HTMLInputElement>) => {
question.points = parseInt(e.target.value)
editQuestion(question.id, question);
editQuestion(question.id, {...question});
};

const handleChoiceChange = (
Expand Down Expand Up @@ -249,4 +254,4 @@ export const QuestionEdit = ({
</div>
</>
);
};
};
13 changes: 8 additions & 5 deletions src/quizzer/QuizCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ import { Quiz } from "../interfaces/quiz";
import "./QuizCard.css";
import { Question } from "../interfaces/question";

export const QuizCard = ({
export function QuizCard ({
quiz,
handleClick
}: {) => {
handleQuizView
}: {
quiz: Quiz,
handleQuizView: (id: number) => void
}): JSX.Element{
const filteredQuestions = quiz.questionList.filter(
(q: Question): boolean =>
(quiz.published && q.published) || !quiz.published
Expand All @@ -19,7 +22,7 @@ export const QuizCard = ({
<h3
className="title"
onClick={() => {
handleClick(quiz.id);
handleQuizView(quiz.id);
}}
>
{quiz.title}
Expand All @@ -32,4 +35,4 @@ export const QuizCard = ({
<p>{quiz.body}</p>
</div>
);
};
};
41 changes: 24 additions & 17 deletions src/quizzer/QuizEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,51 @@ import { QuestionEdit } from "./QuestionEdit";

import "./QuizEdit.css";

export const QuizEdit = ({

export function QuizEdit ({
quiz,
editQuiz,
deleteQuiz,
switchEdit,
resetView
}: {) => {
resetQuizView
}: { quiz: Quiz,
editQuiz: (qId: number, newQuiz: Quiz) => void,
deleteQuiz: (qId: number) => void,
switchEdit: () => void,
resetQuizView: () => void,

}): JSX.Element {

const [newQuiz, setNewQuiz] = useState<Quiz>({ ...quiz });

const editQuestion = (questionId: number, newQuestion: Question) => {
setNewQuiz({
...newQuiz,
questionList: newQuiz.questionList.map(
)
questionList: newQuiz.questionList.map((question: Question): Question => questionId === question.id ? {...newQuestion} : question)
});
};

const removeQuestion = (questionId: number) => {
setNewQuiz({
...newQuiz,
questionList: newQuiz.questionList.filter(
)
questionList: newQuiz.questionList.filter((question: Question): boolean => questionId !== question.id)
});
};

const saveChanges = () => {
editQuiz(quiz.id, { ...newQuiz });
const newTitle = "spam"
const newquiz = {...newQuiz, title: newTitle}
setNewQuiz(newquiz)
editQuiz(quiz.id, newQuiz);
};

const swapQuestion = (idx1: number, idx2: number) => {
const question1 = newQuiz.questionList[idx1]
const question2 = newQuiz.questionList[idx2]
setNewQuiz({
...newQuiz,
questionList: newQuiz.questionList.map(
(q: Question, idx: number): Question => {
if (idx === idx1) return newQuiz.questionList[idx2];
if (idx === idx2) return newQuiz.questionList[idx1];
return;
}
)
(idx: Question): Question => idx === question1 ? idx = question2 : idx === question2 ? idx = question1 : idx)
});
};

Expand Down Expand Up @@ -79,7 +85,7 @@ export const QuizEdit = ({
) => {
setNewQuiz({
...newQuiz,
published:
published: !newQuiz.published
});
}}
></Form.Check>
Expand Down Expand Up @@ -140,6 +146,7 @@ export const QuizEdit = ({
variant="success"
className="save_edit_btn"
onClick={() => {
console.log(newQuiz.title)
saveChanges();
switchEdit();
}}
Expand All @@ -154,7 +161,7 @@ export const QuizEdit = ({
variant="danger"
onClick={() => {
deleteQuiz(quiz.id);
resetView();
resetQuizView();
}}
>
Delete Quiz
Expand All @@ -163,4 +170,4 @@ export const QuizEdit = ({
</div>
</div>
);
};
};
Loading