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);
|
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);
|
results[partKey] = parseFloat(input.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,13 +218,13 @@ export class ExamCorrect {
|
|||||||
}).then(
|
}).then(
|
||||||
(response) => response.json()
|
(response) => response.json()
|
||||||
).then(
|
).then(
|
||||||
(response) => this._processResponse(response, user)
|
(response) => this._processResponse(response, user, results)
|
||||||
).catch((error) => {
|
).catch((error) => {
|
||||||
console.error('Error while processing response', error);
|
console.error('Error while processing response', error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_processResponse(response, user) {
|
_processResponse(response, user, results) {
|
||||||
if (response) {
|
if (response) {
|
||||||
if (response.status === 'no-op') {
|
if (response.status === 'no-op') {
|
||||||
if (response.users) {
|
if (response.users) {
|
||||||
@ -247,7 +250,7 @@ export class ExamCorrect {
|
|||||||
setStatus(this._userInputStatus, STATUS.AMBIGUOUS);
|
setStatus(this._userInputStatus, STATUS.AMBIGUOUS);
|
||||||
// TODO how to destroy candidate handlers?
|
// TODO how to destroy candidate handlers?
|
||||||
response.users.forEach((userCandidate) => {
|
response.users.forEach((userCandidate) => {
|
||||||
const candidateItem = document.createElement('li');
|
const candidateItem = document.createElement('LI');
|
||||||
candidateItem.innerHTML = userToHTML(userCandidate);
|
candidateItem.innerHTML = userToHTML(userCandidate);
|
||||||
candidateItem.setAttribute(EXAM_CORRECT_USER_ATTR, userCandidate.id);
|
candidateItem.setAttribute(EXAM_CORRECT_USER_ATTR, userCandidate.id);
|
||||||
|
|
||||||
@ -298,7 +301,7 @@ export class ExamCorrect {
|
|||||||
// TODO set edit button visibility
|
// TODO set edit button visibility
|
||||||
status = STATUS.AMBIGUOUS;
|
status = STATUS.AMBIGUOUS;
|
||||||
if (response.users) {
|
if (response.users) {
|
||||||
this._showUserList(userElem, response.users);
|
this._showUserList(row, response.users, results);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'failure':
|
case 'failure':
|
||||||
@ -327,9 +330,10 @@ export class ExamCorrect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO better name
|
// TODO better name
|
||||||
_showUserList(elem, users) {
|
_showUserList(row, users, results) {
|
||||||
|
const userElem = row.cells.item(1);
|
||||||
if (users) {
|
if (users) {
|
||||||
removeAllChildren(elem);
|
removeAllChildren(userElem);
|
||||||
const list = document.createElement('UL');
|
const list = document.createElement('UL');
|
||||||
for (const user of users) {
|
for (const user of users) {
|
||||||
const listItem = document.createElement('LI');
|
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_ATTR, user.id);
|
||||||
listItem.setAttribute(EXAM_CORRECT_USER_DNAME_ATTR, user['display-name']);
|
listItem.setAttribute(EXAM_CORRECT_USER_DNAME_ATTR, user['display-name']);
|
||||||
// TODO destroy event handler
|
// TODO destroy event handler
|
||||||
//const acceptCandidateHandler = () => {
|
const acceptCandidateHandler = () => {
|
||||||
// elem.innerHTML = userToHTML(user);
|
userElem.innerHTML = userToHTML(user);
|
||||||
//};
|
this._rowToRequest(row, listItem, results);
|
||||||
//listItem.addEventListener('click', acceptCandidateHandler);
|
};
|
||||||
|
listItem.addEventListener('click', acceptCandidateHandler);
|
||||||
list.appendChild(listItem);
|
list.appendChild(listItem);
|
||||||
}
|
}
|
||||||
elem.appendChild(list);
|
userElem.appendChild(list);
|
||||||
} else {
|
} else {
|
||||||
console.error('Unable to show users from invalid response');
|
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() {
|
_clearUserInput() {
|
||||||
removeAllChildren(this._userInputCandidates);
|
removeAllChildren(this._userInputCandidates);
|
||||||
clearInput(this._userInput);
|
clearInput(this._userInput);
|
||||||
|
|||||||
Reference in New Issue
Block a user