Skip to content
Snippets Groups Projects
Commit a54de35d authored by Remco Tukker's avatar Remco Tukker
Browse files

always open the survey in readonly mode

parent a3d17631
No related branches found
No related tags found
1 merge request!57Feature/survey locking system
......@@ -20,7 +20,6 @@ function App(): ReactElement {
<Route path="survey/admin/inspect/:year" element={<SurveyContainerComponent loadFrom={'/api/survey/inspect/'} />} />
<Route path="survey/admin/try/:year" element={<SurveyContainerComponent loadFrom={'/api/survey/try/'} />} />
<Route path="survey/respond/:year/:nren" element={<SurveyContainerComponent loadFrom={'/api/survey/load/'} saveTo={'/api/survey/save/'} />} />
<Route path="survey/show/:year/:nren" element={<SurveyContainerComponent loadFrom={'/api/survey/load/'} readonly />} />
<Route path="*" element={<Landing />} />
</Routes>
</UserProvider>
......
......@@ -12,7 +12,7 @@ Serializer.addProperty("itemvalue", "customDescription:text");
Serializer.addProperty("question", "hideCheckboxLabels:boolean");
function SurveyContainerComponent({ loadFrom, saveTo = '', readonly = false }) {
function SurveyContainerComponent({ loadFrom, saveTo = '' }) {
const [surveyModel, setSurveyModel] = useState<Model>();
const verificationStatus = useRef<Map<string, VerificationStatus>>(new Map());
const { year, nren } = useParams();
......@@ -46,9 +46,7 @@ function SurveyContainerComponent({ loadFrom, saveTo = '', readonly = false }) {
survey.currentPageNo = json['page'];
survey.showNavigationButtons = false;
survey.showTOC = false;
if (readonly) {
survey.mode = 'display';
}
survey.mode = 'display';
setSurveyModel(survey);
}
......@@ -56,12 +54,11 @@ function SurveyContainerComponent({ loadFrom, saveTo = '', readonly = false }) {
getModel().catch(error => setError('Error when loading survey: ' + error.message))
}, []);
if (!surveyModel) {
return error
}
function saveSurveyData(survey, success?, failure?) {
if (saveTo == '') {
return;
......@@ -84,8 +81,6 @@ function SurveyContainerComponent({ loadFrom, saveTo = '', readonly = false }) {
xhr.send(JSON.stringify(saveData));
}
const saveSurvey = () => { saveSurveyData(surveyModel); };
const endSurvey = () => {
let firstValidationError = '';
const verificationValidator = (survey, options) => {
......@@ -131,6 +126,25 @@ function SurveyContainerComponent({ loadFrom, saveTo = '', readonly = false }) {
}
}
const doSurveyAction = (action) => {
switch(action) {
case 'save':
saveSurveyData(surveyModel);
break;
case 'complete':
endSurvey();
break;
case 'saveAndStopEdit':
saveSurveyData(surveyModel); // TODO include stop editing
surveyModel.mode = 'display';
break;
case 'startEdit':
// TODO lock http request
surveyModel.mode = 'edit';
break;
}
}
return (
<Container className="survey-container">
<Row className="survey-content">
......@@ -141,7 +155,7 @@ function SurveyContainerComponent({ loadFrom, saveTo = '', readonly = false }) {
</Row>
<Row>
<SurveyNavigationComponent surveyModel={surveyModel} endSurvey={endSurvey} saveSurvey={saveSurvey} validatePage={validatePage} readonly={readonly}>
<SurveyNavigationComponent surveyModel={surveyModel} doSurveyAction={doSurveyAction} validatePage={validatePage}>
<SurveyComponent surveyModel={surveyModel} verificationStatus={verificationStatus} />
</SurveyNavigationComponent>
</Row>
......
......@@ -98,12 +98,8 @@ function SurveyManagementComponent() {
<td>{response.status}</td>
<td>locked by</td>
<td>
<Button onClick={() => navigate(`/survey/show/${survey.year}/${response.nren}`)} style={{ pointerEvents: 'auto' }}
title="Open the responses of the NREN in readonly mode. Allows marking the responses as checked if the survey is completed.">
show
</Button>
<Button onClick={() => navigate(`/survey/respond/${survey.year}/${response.nren}`)} style={{ pointerEvents: 'auto' }}
title="Edit the responses of the NREN.">
title="Open the responses of the NREN.">
edit
</Button>
......
......@@ -3,10 +3,13 @@ import ProgressBar from './ProgressBar';
import { Container, Row } from "react-bootstrap";
function SurveyNavigationComponent({ surveyModel, endSurvey, saveSurvey, validatePage, children, readonly }) {
function SurveyNavigationComponent({ surveyModel, doSurveyAction, validatePage, children }) {
const [pageNo, setPageNo] = useState(0);
const [editing, setEditing] = useState(false);
useEffect(() => {
setPageNo(surveyModel.currentPageNo)
setPageNo(surveyModel.currentPageNo);
setEditing(surveyModel.mode == 'edit');
}, [surveyModel]);
const pageNoSetter = (page) => {
......@@ -25,16 +28,28 @@ function SurveyNavigationComponent({ surveyModel, endSurvey, saveSurvey, validat
);
};
const startEdit = () => {
doSurveyAction('startEdit');
setEditing(surveyModel.mode == 'edit');
}
const saveAndStopEdit = () => {
doSurveyAction('saveAndStopEdit');
setEditing(surveyModel.mode == 'edit');
}
const save = () => doSurveyAction('save');
const complete = () => doSurveyAction('complete');
const renderExternalNavigation = () => {
if (readonly) {
return <></>;
}
return (
<div className="navigation-block">
<div className="navigation-progress-container">
<div className="navigation-buttons-container">
{(pageNo === surveyModel.visiblePages.length - 1) && renderButton('Complete Survey', endSurvey)}
{renderButton('Save progress', saveSurvey)}
{!editing && renderButton('Start editing', startEdit)}
{editing && (pageNo === surveyModel.visiblePages.length - 1) && renderButton('Complete Survey', complete)}
{editing && renderButton('Save and stop editing', saveAndStopEdit)}
{editing && renderButton('Save progress', save)}
{/* {(pageNo !== surveyModel.visiblePages.length - 1) && renderButton('Next Page', incrementPageNo)} */}
{/* {renderButton('Validate Page', validatePage)} */}
{/* {pageNo !== 0 && renderButton('Previous Page', decrementPageNo)} */}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment