Save text while editing the template

Before when adding/removing points any text changes were lost.
This commit is contained in:
Andreas Svanberg 2024-10-21 10:09:52 +02:00
parent ffcd880384
commit 95d9e2658d

@ -1,6 +1,7 @@
package se.su.dsv.scipro.admin.pages.grading; package se.su.dsv.scipro.admin.pages.grading;
import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.markup.html.GenericWebMarkupContainer; import org.apache.wicket.markup.html.GenericWebMarkupContainer;
@ -13,7 +14,6 @@ import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.IModel; import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LambdaModel; import org.apache.wicket.model.LambdaModel;
import org.apache.wicket.model.Model;
class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTemplate> { class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTemplate> {
EditingGradingTemplateComponentPanel( EditingGradingTemplateComponentPanel(
@ -25,7 +25,11 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
add(new TextArea<>("note", LambdaModel.of( add(new TextArea<>("note", LambdaModel.of(
editingGradingTemplateModel, editingGradingTemplateModel,
EditingGradingTemplate::getNote, EditingGradingTemplate::getNote,
EditingGradingTemplate::setNote))); EditingGradingTemplate::setNote)) {
{
add(new AutoSave());
}
});
add(new ListView<>("criteria", editingGradingTemplateModel.map(EditingGradingTemplate::getCriteria)) { add(new ListView<>("criteria", editingGradingTemplateModel.map(EditingGradingTemplate::getCriteria)) {
{ {
@ -48,11 +52,19 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
add(new TextField<>("title_sv", LambdaModel.of( add(new TextField<>("title_sv", LambdaModel.of(
model, model,
EditingGradingTemplate.Criteria::getTitleSv, EditingGradingTemplate.Criteria::getTitleSv,
EditingGradingTemplate.Criteria::setTitleSv))); EditingGradingTemplate.Criteria::setTitleSv)) {
{
add(new AutoSave());
}
});
add(new TextField<>("title_en", LambdaModel.of( add(new TextField<>("title_en", LambdaModel.of(
model, model,
EditingGradingTemplate.Criteria::getTitleEn, EditingGradingTemplate.Criteria::getTitleEn,
EditingGradingTemplate.Criteria::setTitleEn))); EditingGradingTemplate.Criteria::setTitleEn)) {
{
add(new AutoSave());
}
});
add(new ListView<>("points", model.map(EditingGradingTemplate.Criteria::getPoints)) { add(new ListView<>("points", model.map(EditingGradingTemplate.Criteria::getPoints)) {
@Override @Override
@ -88,12 +100,20 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
add(new TextArea<>("requirement_en", LambdaModel.of( add(new TextArea<>("requirement_en", LambdaModel.of(
model, model,
EditingGradingTemplate.Criteria.Point::getRequirementEn, EditingGradingTemplate.Criteria.Point::getRequirementEn,
EditingGradingTemplate.Criteria.Point::setRequirementEn))); EditingGradingTemplate.Criteria.Point::setRequirementEn)) {
{
add(new AutoSave());
}
});
add(new TextArea<>("requirement_sv", LambdaModel.of( add(new TextArea<>("requirement_sv", LambdaModel.of(
model, model,
EditingGradingTemplate.Criteria.Point::getRequirementSv, EditingGradingTemplate.Criteria.Point::getRequirementSv,
EditingGradingTemplate.Criteria.Point::setRequirementSv))); EditingGradingTemplate.Criteria.Point::setRequirementSv)) {
{
add(new AutoSave());
}
});
add(new AjaxLink<>("remove") { add(new AjaxLink<>("remove") {
@Override @Override
@ -106,4 +126,15 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
} }
} }
} }
private static class AutoSave extends AjaxFormComponentUpdatingBehavior {
public AutoSave() {
super("keyup");
}
@Override
protected void onUpdate(AjaxRequestTarget target) {
// just trigger the ajax call is enough to update the model object
}
}
} }