Skip to content

Commit

Permalink
extracted navigation panel from wizard header to be used also on othe…
Browse files Browse the repository at this point in the history
…r places. more simulation ui
  • Loading branch information
1azyman committed Jan 26, 2023
1 parent fd60520 commit d522e7a
Show file tree
Hide file tree
Showing 6 changed files with 209 additions and 136 deletions.
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
<!--
~ Copyright (c) 2010-2018 Evolveum
~ Copyright (c) 2022 Evolveum and contributors
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->

<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<a class="btn btn-outline-primary" wicket:id="back">
<i class="fas fa-arrow-left mr-2"></i>
<wicket:message key="WizardHeader.back"/>
<wicket:message key="NavigationPanel.back"/>
</a>
<h3 class="mb-0" wicket:id="title"/>
<div class="flex-grow-1" wicket:id="content"/>
<a class="btn btn-success" wicket:id="next">
<wicket:message key="WizardHeader.next"/>
<wicket:message key="NavigationPanel.next"/>
<span wicket:id="nextLabel"/>
<i class="fas fa-arrow-right ml-2"></i>
</a>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
/*
* Copyright (c) 2010-2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.gui.api.component.wizard;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.wizard.BehaviourDelegator;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

/**
* Created by Viliam Repan (lazyman).
*/
public class NavigationPanel extends BasePanel {

private static final long serialVersionUID = 1L;

private static final String ID_BACK = "back";
private static final String ID_TITLE = "title";
private static final String ID_CONTENT = "content";
private static final String ID_NEXT = "next";
private static final String ID_NEXT_LABEL = "nextLabel";

public NavigationPanel(String id) {
super(id);

initLayout();
}

private void initLayout() {
add(AttributeAppender.append("class", "d-flex align-items-center flex-wrap gap-3 mb-3"));

AjaxLink back = createBackButton(ID_BACK);
add(back);
AjaxLink next = createNextButton(ID_NEXT, createNextTitleModel());
add(next);

add(new Label(ID_TITLE, createTitleModel()));

add(createHeaderContent());
}

protected Component createHeaderContent() {
return createHeaderContent(ID_CONTENT);
}

protected Component createHeaderContent(String id) {
return new WebMarkupContainer(id);
}

protected IModel<String> createNextTitleModel() {
return () -> null;
}

protected IModel<String> createTitleModel() {
return () -> null;
}

protected AjaxLink createNextButton(String id, IModel<String> nextTitle) {
AjaxLink next = new AjaxLink<>(id) {

@Override
public void onClick(AjaxRequestTarget target) {
onNextPerformed(target);
}
};
next.setOutputMarkupId(true);
next.setOutputMarkupPlaceholderTag(true);
WebComponentUtil.addDisabledClassBehavior(next);

next.add(new BehaviourDelegator(() -> getNextVisibilityBehaviour()));

next.add(new Label(ID_NEXT_LABEL, nextTitle));
return next;
}

@NotNull
protected VisibleEnableBehaviour getNextVisibilityBehaviour() {
return VisibleEnableBehaviour.ALWAYS_VISIBLE_ENABLED;
}

protected AjaxLink createBackButton(String id) {
AjaxLink back = new AjaxLink<>(id) {

@Override
public void onClick(AjaxRequestTarget target) {
onBackPerformed(target);
}
};
back.setOutputMarkupId(true);
back.setOutputMarkupPlaceholderTag(true);
WebComponentUtil.addDisabledClassBehavior(back);

back.add(new BehaviourDelegator(() -> getBackVisibilityBehaviour()));

return back;
}

@NotNull
protected VisibleEnableBehaviour getBackVisibilityBehaviour() {
return VisibleEnableBehaviour.ALWAYS_VISIBLE_ENABLED;
}

protected void onBackPerformed(AjaxRequestTarget target) {

}

protected void onNextPerformed(AjaxRequestTarget target) {

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,15 @@

package com.evolveum.midpoint.gui.api.component.wizard;

import com.evolveum.midpoint.gui.api.util.WebComponentUtil;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

/**
* Created by Viliam Repan (lazyman).
*/
public class WizardHeader extends BasePanel implements WizardListener {
public class WizardHeader extends NavigationPanel implements WizardListener {

private static final long serialVersionUID = 1L;

private static final String ID_BACK = "back";
private static final String ID_TITLE = "title";
private static final String ID_CONTENT = "content";
private static final String ID_NEXT = "next";
private static final String ID_NEXT_LABEL = "nextLabel";

private WizardModel model;

public WizardHeader(String id, WizardModel model) {
Expand All @@ -42,86 +24,23 @@ public WizardHeader(String id, WizardModel model) {
this.model = model;

model.addWizardListener(this);

IModel<String> currentPanelTitle = () -> model.getActiveStep().getTitle().getObject();
IModel<String> nextPanelTitle = () -> {
WizardStep next = model.getNextPanel();
return next != null ? next.getTitle().getObject() : null;
};

initLayout(currentPanelTitle, nextPanelTitle);
}

@Override
public void onStepChanged(WizardStep newStep) {
addOrReplace(createHeaderContent(ID_CONTENT));
protected IModel<String> createTitleModel() {
return () -> model.getActiveStep().getTitle().getObject();
}

private void initLayout(IModel<String> currentPanelTitle, IModel<String> nextPanelTitle) {
add(AttributeAppender.append("class", "d-flex align-items-center flex-wrap gap-3 mb-3"));

AjaxLink back = createBackButton(ID_BACK);
add(back);
AjaxLink next = createNextButton(ID_NEXT, nextPanelTitle);
add(next);

add(new Label(ID_TITLE, currentPanelTitle));
}

protected Component createHeaderContent(String id) {
return new WebMarkupContainer(id);
}

protected AjaxLink createNextButton(String id, IModel<String> nextPanelTitle) {
AjaxLink next = new AjaxLink<>(id) {

@Override
public void onClick(AjaxRequestTarget target) {
onNextPerformed(target);
}
};
next.setOutputMarkupId(true);
next.setOutputMarkupPlaceholderTag(true);
WebComponentUtil.addDisabledClassBehavior(next);

next.add(new BehaviourDelegator(() -> getNextVisibilityBehaviour()));

next.add(new Label(ID_NEXT_LABEL, nextPanelTitle));
return next;
}

@NotNull
protected VisibleEnableBehaviour getNextVisibilityBehaviour() {
return VisibleEnableBehaviour.ALWAYS_VISIBLE_ENABLED;
}

protected AjaxLink createBackButton(String id) {
AjaxLink back = new AjaxLink<>(id) {

@Override
public void onClick(AjaxRequestTarget target) {
onBackPerformed(target);
}
@Override
protected IModel<String> createNextTitleModel() {
return () -> {
WizardStep next = model.getNextPanel();
return next != null ? next.getTitle().getObject() : null;
};
back.setOutputMarkupId(true);
back.setOutputMarkupPlaceholderTag(true);
WebComponentUtil.addDisabledClassBehavior(back);

back.add(new BehaviourDelegator(() -> getBackVisibilityBehaviour()));

return back;
}

@NotNull
protected VisibleEnableBehaviour getBackVisibilityBehaviour() {
return VisibleEnableBehaviour.ALWAYS_VISIBLE_ENABLED;
}

protected void onBackPerformed(AjaxRequestTarget target) {

}

protected void onNextPerformed(AjaxRequestTarget target) {

@Override
public void onStepChanged(WizardStep newStep) {
addOrReplace(createHeaderContent());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,36 @@
<html xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:extend>
<div class="d-flex gap-3 mb-3">
<a href="#" class="btn btn-outline-primary">
<i class="fas fa-arrow-left mr-2"></i>
Back
</a>
<h3 class="m-0 pt-1 font-weight-normal">
Simulation view
</h3>
</div>
<div wicket:id="navigation"/>

<div class="row">
<div class="col-3">
<div class="card">
<div class="card-header d-flex gap-2 align-items-center">
<i class="mr-1 fa-solid fa-circle-question"></i>
<h5 class="mb-0">Simulation task details</h5>
<h5 class="mb-0"><wicket:message key="PageSimulationResult.details"/></h5>
</div>
<div class="card-body p-0">
<table class="table">
<tr>
<td>asdf</td>
<td><wicket:message key="PageSimulationResult.startTimestamp"/></td>
<td>2023-01-26T17:32:43+01:00</td>
</tr>
<tr>
<td>End timestamp</td>
<td>2023-01-26T17:32:43+01:00</td>
</tr>
<tr>
<td>Finished in</td>
<td>21 minutes 32 seconds</td>
</tr>
<tr>
<td>Task reference</td>
<td><a href="#">Some reconciliation task</a></td>
</tr>
<tr>
<td>Configuration used</td>
<td><span class="badge badge-success">Production</span></td>
</tr>
</table>
</div>
Expand Down

0 comments on commit d522e7a

Please sign in to comment.