3204 Maintain scroll position when updating a reviewer's target

This commit is contained in:
Andreas Svanberg 2024-01-18 10:53:23 +01:00
parent 671cf74104
commit 5b402bd8c2
3 changed files with 32 additions and 2 deletions

@ -53,7 +53,7 @@
Managing targets for <strong wicket:id="period"></strong>.
</p>
<div class="card mb-3" wicket:id="reviewers">
<wicket:container wicket:id="reviewer">
<div wicket:id="reviewer">
<div class="row g-0">
<div class="col-auto">
<img class="img-fluid rounded-start profile-picture-md" wicket:id="profile_image">
@ -110,7 +110,7 @@
</div>
</div>
</div>
</wicket:container>
</div>
</div>
</div>
</div>

@ -17,6 +17,7 @@ import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import se.su.dsv.scipro.components.ScrollIntoView;
import se.su.dsv.scipro.data.DetachableServiceModel;
import se.su.dsv.scipro.profile.UserLabel;
import se.su.dsv.scipro.profile.UserProfileImage;
@ -214,6 +215,8 @@ public class AdminReviewerCapacityManagementPage extends AbstractAdminProjectPag
Target target = new Target(selectedPeriod.getObject(), springTarget.getObject(), autumnTarget.getObject(), note.getObject());
reviewerCapacityService.assignTarget(getModelObject(), target);
success("Target assigned");
add(new ScrollIntoView(ReviewerCard.this));
}
}
}

@ -0,0 +1,27 @@
package se.su.dsv.scipro.components;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
public class ScrollIntoView extends Behavior {
private Component component;
public ScrollIntoView(Component component) {
this.component = component;
}
@Override
public boolean isTemporary(Component component) {
return true;
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(OnDomReadyHeaderItem.forScript(
"document.getElementById('%s').scrollIntoView({behavior:\"instant\"})".formatted(
this.component.getMarkupId(true))));
}
}