diff --git a/webclient/src/Courses.js b/webclient/src/Courses.js index 835d83c..0f089f4 100644 --- a/webclient/src/Courses.js +++ b/webclient/src/Courses.js @@ -5,7 +5,7 @@ import { Container, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Me import moment from 'moment'; import { isInstructor, requester } from './utils.js'; import { NotFound, PleaseLogin } from './Misc.js'; -import { InstructorCourseList } from './Instructor.js'; +import { InstructorCourseList, InstructorCourseDetail } from './Instructor.js'; export function Courses(props) { const [courses, setCourses] = useState(false); @@ -86,6 +86,10 @@ export function CourseDetail(props) {
{course.name}
+ {isInstructor && + + } +
Course Description
{course.is_old ? course.description.split('\n').map((x, i) => diff --git a/webclient/src/Instructor.js b/webclient/src/Instructor.js index ce25210..a5cc484 100644 --- a/webclient/src/Instructor.js +++ b/webclient/src/Instructor.js @@ -60,28 +60,30 @@ function InstructorCourseEditor(props) { ); } -function InstructorCourseDetail(props) { - const [input, setInput] = useState({ ...props.card }); +export function InstructorCourseDetail(props) { + const { course, setCourse, token } = props; + const [open, setOpen] = useState(false); + const convertNewlineToPara = (t) => t.split('\n').map(x => '

'+x+'

').join('') + const [input, setInput] = useState({ + ...course, + description: course.is_old ? convertNewlineToPara(course.description) : course.description, + }); const [error, setError] = useState(false); const [loading, setLoading] = useState(false); const [success, setSuccess] = useState(false); - const id = props.card.id; - - const handleValues = (e, v) => setInput({ ...input, [v.name]: v.value }); - const handleUpload = (e, v) => setInput({ ...input, [v.name]: e.target.files[0] }); - const handleChange = (e) => handleValues(e, e.currentTarget); - const handleCheck = (e, v) => setInput({ ...input, [v.name]: v.checked }); + const { id } = useParams(); const handleSubmit = (e) => { setLoading(true); setSuccess(false); - const data = { ...input, member_id: props.result.member.id }; - requester('/cards/'+id+'/', 'PUT', props.token, data) + const data = { ...input, is_old: false }; + requester('/courses/'+id+'/', 'PUT', props.token, data) .then(res => { - setLoading(false); setSuccess(true); + setLoading(false); setError(false); - setInput(res); + setOpen(false); + props.setCourse({...course, ...res}); }) .catch(err => { setLoading(false); @@ -90,65 +92,28 @@ function InstructorCourseDetail(props) { }); }; - const handleDelete = (e) => { - e.preventDefault(); - - requester('/cards/'+id+'/', 'DELETE', props.token) - .then(res => { - setInput(false); - }) - .catch(err => { - console.log(err); - }); - }; + return ( +
+
Instructor Panel
- const statusOptions = [ - { key: '0', text: 'Card Active', value: 'card_active' }, - { key: '1', text: 'Card Blocked', value: 'card_blocked' }, - { key: '2', text: 'Card Inactive', value: 'card_inactive' }, - { key: '3', text: 'Card Member Blocked', value: 'card_member_blocked' }, - ]; + {!open && success &&

Saved!

} - return ( - input ? - + {open ?
- - - - - - - {success ? 'Saved.' : 'Save'} - - - - Delete - - - - - Notes: {input.notes || 'None'} +
Edit Course
+ + + + + Submit + -
- : - - Deleted card: {props.card.card_number} - + : + + } +
); }; @@ -184,7 +149,7 @@ export function InstructorCourseList(props) {
Instructor Panel
- {success &&

Added to bottom of course list! View the course.

} + {!open && success &&

Added to bottom of course list! View the course.

} {open ?