WIP: Allow supervisors to request improvements from final seminar opponents #78
@ -34,6 +34,20 @@
|
||||
<button wicket:id="submit" type="submit" class="btn btn-sm btn-success">
|
||||
<wicket:message key="submit"/>
|
||||
</button>
|
||||
<a class="btn btn-outline-secondary btn-sm" wicket:id="request_improvements">
|
||||
Request improvements
|
||||
</a>
|
||||
</form>
|
||||
|
||||
<form wicket:id="request_improvements">
|
||||
<div class="mb-3">
|
||||
<label class="form-label" wicket:for="feedback_to_opponent">
|
||||
Provide feedback to the opponent on how to improve the opposition
|
||||
</label>
|
||||
<textarea class="form-control" wicket:id="feedback_to_opponent" rows="8"></textarea>
|
||||
</div>
|
||||
<button class="btn btn-sm btn-success">Request improvements</button>
|
||||
<a class="btn btn-outline-secondary btn-sm" wicket:id="cancel">Cancel</a>
|
||||
</form>
|
||||
|
||||
<div wicket:id="gradeContainer">
|
||||
|
@ -6,6 +6,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
|
||||
import org.apache.wicket.feedback.FencedFeedbackPanel;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
@ -22,6 +23,7 @@ import org.apache.wicket.markup.html.panel.FeedbackPanel;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.model.IModel;
|
||||
import org.apache.wicket.model.LambdaModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.apache.wicket.model.ResourceModel;
|
||||
import org.apache.wicket.validation.validator.RangeValidator;
|
||||
import org.apache.wicket.validation.validator.StringValidator;
|
||||
@ -75,6 +77,9 @@ public class SeminarOppositionPanel extends Panel {
|
||||
private final WebMarkupContainer oppositionContainer;
|
||||
private final ListView<FinalSeminarOpposition> opponents;
|
||||
|
||||
private FinalSeminarOppositionForm gradeForm;
|
||||
private RequestImprovementsForm requestImprovementsForm;
|
||||
|
||||
public SeminarOppositionPanel(String id, final IModel<FinalSeminar> seminar) {
|
||||
super(id, seminar);
|
||||
this.seminar = seminar;
|
||||
@ -107,6 +112,12 @@ public class SeminarOppositionPanel extends Panel {
|
||||
|
||||
private ListView<FinalSeminarOpposition> getOpponentsList(final IModel<List<FinalSeminarOpposition>> oppositions) {
|
||||
return new ListView<>(OPPONENTS, oppositions) {
|
||||
{
|
||||
// Need to reuse child list items since they contain form components
|
||||
// and if they're recreated all the state and error messages are lost
|
||||
setReuseItems(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void populateItem(final ListItem<FinalSeminarOpposition> item) {
|
||||
final FinalSeminarOpposition opposition = item.getModelObject();
|
||||
@ -121,7 +132,14 @@ public class SeminarOppositionPanel extends Panel {
|
||||
|
||||
item.add(getRemoveLink(item.getModel()));
|
||||
|
||||
item.add(getFinalSeminarOppositionForm(item));
|
||||
gradeForm = getFinalSeminarOppositionForm(item);
|
||||
gradeForm.setOutputMarkupPlaceholderTag(true);
|
||||
item.add(gradeForm);
|
||||
|
||||
requestImprovementsForm = new RequestImprovementsForm("request_improvements", item.getModel());
|
||||
requestImprovementsForm.setVisible(false);
|
||||
requestImprovementsForm.setOutputMarkupPlaceholderTag(true);
|
||||
item.add(requestImprovementsForm);
|
||||
|
||||
if (gradingModuleIsOnForProjectType()) {
|
||||
item.add(new SeminarOppositionReportPanel("report", item.getModel()));
|
||||
@ -277,6 +295,23 @@ public class SeminarOppositionPanel extends Panel {
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
add(
|
||||
new AjaxLink<Void>("request_improvements") {
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target) {
|
||||
requestImprovementsForm.setVisible(true);
|
||||
target.add(requestImprovementsForm);
|
||||
gradeForm.setVisible(false);
|
||||
target.add(gradeForm);
|
||||
target.appendJavaScript(
|
||||
"document.getElementById('" +
|
||||
requestImprovementsForm.get("feedback_to_opponent").getMarkupId() +
|
||||
"').focus();"
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -298,4 +333,34 @@ public class SeminarOppositionPanel extends Panel {
|
||||
private boolean hasSubmittedOppositionReport(FinalSeminarOpposition opposition) {
|
||||
return oppositionReportService.findOrCreateReport(opposition).isSubmitted();
|
||||
}
|
||||
|
||||
private class RequestImprovementsForm extends Form<FinalSeminarOpposition> {
|
||||
|
||||
private final Model<String> feedbackToOpponentModel = new Model<>();
|
||||
|
||||
public RequestImprovementsForm(String id, IModel<FinalSeminarOpposition> model) {
|
||||
super(id, model);
|
||||
TextArea<String> feedbackToOpponentField = new TextArea<>("feedback_to_opponent", feedbackToOpponentModel);
|
||||
feedbackToOpponentField.setRequired(true);
|
||||
add(feedbackToOpponentField);
|
||||
|
||||
add(
|
||||
new AjaxLink<Void>("cancel") {
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target) {
|
||||
requestImprovementsForm.setVisible(false);
|
||||
target.add(requestImprovementsForm);
|
||||
gradeForm.setVisible(true);
|
||||
target.add(gradeForm);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSubmit() {
|
||||
System.out.println("Request improvements submitted");
|
||||
System.out.println("Feedback to opponent: " + feedbackToOpponentModel.getObject());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user