feat(exam-correct): resend option on ambiguous entries (TODO refactor)

This commit is contained in:
Sarah Vaupel 2020-01-21 18:49:53 +01:00
parent 890b3ff025
commit e252be2fef

View File

@ -162,7 +162,10 @@ export class ExamCorrect {
}
const partKey = input.getAttribute(EXAM_CORRECT_PART_INPUT_ATTR);
if (!partKey) throw new Error('Exam part input without part attribute!');
if (!partKey) {
console.error('Error while parsing results: Could not detect exam part key attribute');
return;
}
results[partKey] = parseFloat(input.value);
}
}
@ -215,13 +218,13 @@ export class ExamCorrect {
}).then(
(response) => response.json()
).then(
(response) => this._processResponse(response, user)
(response) => this._processResponse(response, user, results)
).catch((error) => {
console.error('Error while processing response', error);
});
}
_processResponse(response, user) {
_processResponse(response, user, results) {
if (response) {
if (response.status === 'no-op') {
if (response.users) {
@ -247,7 +250,7 @@ export class ExamCorrect {
setStatus(this._userInputStatus, STATUS.AMBIGUOUS);
// TODO how to destroy candidate handlers?
response.users.forEach((userCandidate) => {
const candidateItem = document.createElement('li');
const candidateItem = document.createElement('LI');
candidateItem.innerHTML = userToHTML(userCandidate);
candidateItem.setAttribute(EXAM_CORRECT_USER_ATTR, userCandidate.id);
@ -298,7 +301,7 @@ export class ExamCorrect {
// TODO set edit button visibility
status = STATUS.AMBIGUOUS;
if (response.users) {
this._showUserList(userElem, response.users);
this._showUserList(row, response.users, results);
}
break;
case 'failure':
@ -327,9 +330,10 @@ export class ExamCorrect {
}
// TODO better name
_showUserList(elem, users) {
_showUserList(row, users, results) {
const userElem = row.cells.item(1);
if (users) {
removeAllChildren(elem);
removeAllChildren(userElem);
const list = document.createElement('UL');
for (const user of users) {
const listItem = document.createElement('LI');
@ -337,18 +341,57 @@ export class ExamCorrect {
listItem.setAttribute(EXAM_CORRECT_USER_ATTR, user.id);
listItem.setAttribute(EXAM_CORRECT_USER_DNAME_ATTR, user['display-name']);
// TODO destroy event handler
//const acceptCandidateHandler = () => {
// elem.innerHTML = userToHTML(user);
//};
//listItem.addEventListener('click', acceptCandidateHandler);
const acceptCandidateHandler = () => {
userElem.innerHTML = userToHTML(user);
this._rowToRequest(row, listItem, results);
};
listItem.addEventListener('click', acceptCandidateHandler);
list.appendChild(listItem);
}
elem.appendChild(list);
userElem.appendChild(list);
} else {
console.error('Unable to show users from invalid response');
}
}
_rowToRequest(row, listItem, results) {
const now = moment();
const timeElem = row.cells.item(0);
timeElem.innerHTML = now.format(MOMENT_FORMAT);
timeElem.classList.add('exam-correct--local-time');
const userElem = row.cells.item(1);
const statusElem = row.querySelector('.exam-correct--ambiguous');
setStatus(statusElem, STATUS.LOADING);
const body = {
user: listItem.getAttribute(EXAM_CORRECT_USER_ATTR),
results: results,
};
this._app.httpClient.post({
url: EXAM_CORRECT_URL_POST,
headers: EXAM_CORRECT_HEADERS,
body: JSON.stringify(body),
}).then(
(response) => response.json()
).then((response) => {
switch (response.status) {
case 'success':
userElem.innerHTML = userToHTML(response.user);
// TODO replace part results with results from server
timeElem.innerHTML = moment(response.time).format(MOMENT_FORMAT);
timeElem.classList.remove('exam-correct--local-time');
setStatus(statusElem, STATUS.SUCCESS);
break;
default:
// non-success response on request with a uuid => panic and ignore for now
}
}).catch((error) => {
console.error(error);
});
}
_clearUserInput() {
removeAllChildren(this._userInputCandidates);
clearInput(this._userInput);