feat(exam-correct): resend option on ambiguous entries (TODO refactor)
This commit is contained in:
parent
890b3ff025
commit
e252be2fef
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user