fix(exam-correct): fix result info and response handling
This commit is contained in:
parent
f7136bca15
commit
cd479e2f0c
@ -233,19 +233,37 @@ export class ExamCorrect {
|
|||||||
results[partKey] = parseFloat(input.value);
|
results[partKey] = parseFloat(input.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// console.log('results', results);
|
|
||||||
|
|
||||||
const result = this._resultSelect && this._resultSelect.value !== 'none' && this._resultSelect.value;
|
let result;
|
||||||
|
if (this._resultSelect) {
|
||||||
|
switch (this._resultSelect.value) {
|
||||||
|
case 'none':
|
||||||
|
result = undefined;
|
||||||
|
break;
|
||||||
|
case 'delete':
|
||||||
|
result = null;
|
||||||
|
break;
|
||||||
|
case 'passed':
|
||||||
|
case 'failed':
|
||||||
|
result = { status: 'attended', result: { Left: this._resultSelect.value } };
|
||||||
|
break;
|
||||||
|
case 'attended':
|
||||||
|
result = { status: 'attended', result: { Right: this._resultGradeSelect.value } };
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
result = { status: this._resultSelect.value };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// abort send if there are neither part-results nor an exam-result (after validation)
|
// abort send if there are neither part-results nor an exam-result (after validation)
|
||||||
if (Object.keys(results).length <= 0 && (!result || result === 'none')) return;
|
if (Object.keys(results).length <= 0 && result === undefined) return;
|
||||||
|
|
||||||
const rowInfo = {
|
const rowInfo = {
|
||||||
users: [user],
|
users: [user],
|
||||||
status: STATUS.LOADING,
|
status: STATUS.LOADING,
|
||||||
};
|
};
|
||||||
if (results && results !== {}) rowInfo.results = results;
|
if (results && results !== {}) rowInfo.results = results;
|
||||||
if (result && result !== 'none') rowInfo.result = result;
|
if (result !== undefined) rowInfo.result = result;
|
||||||
this._addRow(rowInfo);
|
this._addRow(rowInfo);
|
||||||
|
|
||||||
// clear inputs on validation success
|
// clear inputs on validation success
|
||||||
@ -268,7 +286,7 @@ export class ExamCorrect {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_processResponse(request, response, user, targetRow, ...results) {
|
_processResponse(request, response, user, targetRow, ...results) { // eslint-disable-line no-unused-vars
|
||||||
if (response) {
|
if (response) {
|
||||||
if (response.status === 'no-op') {
|
if (response.status === 'no-op') {
|
||||||
if (response.users) {
|
if (response.users) {
|
||||||
@ -324,8 +342,8 @@ export class ExamCorrect {
|
|||||||
const savedEntries = this._storageManager.load('entries') || [];
|
const savedEntries = this._storageManager.load('entries') || [];
|
||||||
let newEntry = {
|
let newEntry = {
|
||||||
users: null,
|
users: null,
|
||||||
results: null,
|
results: {},
|
||||||
result: null,
|
result: undefined,
|
||||||
status: STATUS.FAILURE,
|
status: STATUS.FAILURE,
|
||||||
message: null,
|
message: null,
|
||||||
date: null,
|
date: null,
|
||||||
@ -341,12 +359,12 @@ export class ExamCorrect {
|
|||||||
case 'success':
|
case 'success':
|
||||||
status = STATUS.SUCCESS;
|
status = STATUS.SUCCESS;
|
||||||
if (response.user) {
|
if (response.user) {
|
||||||
const timeElem = row.cells.item(0);
|
const timeElem = row.cells.item(this._cIndices.get('date'));
|
||||||
timeElem.innerHTML = moment(response.time).format(this._dateFormat);
|
timeElem.innerHTML = moment(response.time).format(this._dateFormat);
|
||||||
timeElem.classList.remove('exam-correct--local-time');
|
timeElem.classList.remove('exam-correct--local-time');
|
||||||
newEntry.users = [response.user];
|
newEntry.users = [response.user];
|
||||||
newEntry.results = response.results;
|
newEntry.results = response.results;
|
||||||
newEntry.result = response.grade;
|
if (response.grade !== undefined) newEntry.result = response.grade;
|
||||||
} else {
|
} else {
|
||||||
console.error('Invalid response');
|
console.error('Invalid response');
|
||||||
return;
|
return;
|
||||||
@ -357,16 +375,12 @@ export class ExamCorrect {
|
|||||||
// TODO set edit button visibility
|
// TODO set edit button visibility
|
||||||
status = STATUS.AMBIGUOUS;
|
status = STATUS.AMBIGUOUS;
|
||||||
newEntry.users = response.users;
|
newEntry.users = response.users;
|
||||||
newEntry.results = typeof results === 'undefined' ? {} : results;
|
|
||||||
newEntry.result = typeof result === 'undefined' ? undefined : result; // eslint-disable-line no-undef
|
|
||||||
newEntry.message = response.message || null;
|
newEntry.message = response.message || null;
|
||||||
break;
|
break;
|
||||||
case 'failure':
|
case 'failure':
|
||||||
status = STATUS.FAILURE;
|
status = STATUS.FAILURE;
|
||||||
newEntry.users = (response.user && [response.user]) || null;
|
newEntry.users = (response.user && [response.user]) || null;
|
||||||
newEntry.results = typeof results === 'undefined' ? {} : results;
|
|
||||||
newEntry.message = response.message || null;
|
newEntry.message = response.message || null;
|
||||||
newEntry.result = typeof result === 'undefined' ? undefined : result; // eslint-disable-line no-undef
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// TODO show tooltip with 'invalid response'
|
// TODO show tooltip with 'invalid response'
|
||||||
@ -413,6 +427,14 @@ export class ExamCorrect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (newEntry.result !== undefined) {
|
||||||
|
const examResultCell = row.cells.item(this._cIndices.get('result'));
|
||||||
|
if (examResultCell) {
|
||||||
|
examResultCell.innerHTML = this._examResultToHTML(newEntry.result);
|
||||||
|
examResultCell.classList.remove('exam-correct--result-unconfirmed');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
savedEntries.push(newEntry);
|
savedEntries.push(newEntry);
|
||||||
this._storageManager.save('entries', savedEntries);
|
this._storageManager.save('entries', savedEntries);
|
||||||
return;
|
return;
|
||||||
@ -426,6 +448,21 @@ export class ExamCorrect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_examResultToHTML(examResult) {
|
||||||
|
let html = '';
|
||||||
|
|
||||||
|
if (examResult) {
|
||||||
|
if (examResult.status === 'attended')
|
||||||
|
html = examResult.result.Left || examResult.result.Right;
|
||||||
|
else
|
||||||
|
html = examResult.status;
|
||||||
|
} else if (examResult === null) {
|
||||||
|
html = '<i class="fas fa-fw fa-trash"></i>';
|
||||||
|
}
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO better name
|
// TODO better name
|
||||||
_showUserList(row, users, results) {
|
_showUserList(row, users, results) {
|
||||||
let userElem = row.cells.item(this._cIndices.get('user'));
|
let userElem = row.cells.item(this._cIndices.get('user'));
|
||||||
@ -525,8 +562,8 @@ export class ExamCorrect {
|
|||||||
|
|
||||||
const resultCell = document.createElement('TD');
|
const resultCell = document.createElement('TD');
|
||||||
resultCell.colSpan = 2;
|
resultCell.colSpan = 2;
|
||||||
if (rowInfo.result)
|
resultCell.innerHTML = this._examResultToHTML(rowInfo.result);
|
||||||
resultCell.innerHTML = rowInfo.result === 'attended' ? this._resultGradeSelect.value : rowInfo.result;
|
resultCell.classList.add('exam-correct--result-unconfirmed');
|
||||||
cells.set(this._cIndices.get('result'), resultCell);
|
cells.set(this._cIndices.get('result'), resultCell);
|
||||||
|
|
||||||
const statusCell = document.createElement('TD');
|
const statusCell = document.createElement('TD');
|
||||||
@ -563,28 +600,8 @@ export class ExamCorrect {
|
|||||||
if (partResults && Object.entries(partResults).length !== 0)
|
if (partResults && Object.entries(partResults).length !== 0)
|
||||||
body.results = partResults;
|
body.results = partResults;
|
||||||
|
|
||||||
if (examResult) {
|
if (examResult !== undefined)
|
||||||
switch (examResult) {
|
body.grade = examResult;
|
||||||
case 'none':
|
|
||||||
break;
|
|
||||||
case 'delete':
|
|
||||||
body.grade = null;
|
|
||||||
break;
|
|
||||||
case 'attended':
|
|
||||||
body.grade = { status: examResult, result: { Right: this._resultGradeSelect.value } };
|
|
||||||
break;
|
|
||||||
case 'passed':
|
|
||||||
case 'failed':
|
|
||||||
body.grade = { status: 'attended', result: { Left: examResult } };
|
|
||||||
break;
|
|
||||||
case 'no-show':
|
|
||||||
case 'voided':
|
|
||||||
body.grade = { status: examResult };
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break; // TODO work in progress
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user