Skip to content

Commit

Permalink
change selecting of resource and associations on role wizard to table
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Feb 14, 2023
1 parent e1aff72 commit 27964dd
Show file tree
Hide file tree
Showing 17 changed files with 566 additions and 109 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@
<span class="btn btn-tool mt-0">
<i class="p-1" wicket:id="infoIcon"/>
</span>
<button class="ml-auto btn btn-sm btn-primary" wicket:id="resetButton">
<wicket:message key="ExpressionPanel.resetButton"/>
</button>
<div class="ml-auto">
<button class="ml-auto btn btn-sm btn-primary" wicket:id="resetButton">
<wicket:message key="ExpressionPanel.resetButton"/>
</button>
</div>
</div>
<div wicket:id="evaluatorPanel"/>
</wicket:panel>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,13 @@
<wicket:panel>
<wicket:enclosure child="tilesContainer">
<div class="d-flex flex-column flex-grow-1">
<div wicket:id="tilesHeader"/>
<div class="card d-flex flex-column p-3 mb-0 mt-4" style="min-height: 5.4rem;" wicket:id="selectedItemsContainer">
<span>
<wicket:message key="SelectObjectClassesStepPanel.selectedItem"/>
</span>
<div class="d-flex flex-wrap gap-2">
<wicket:container wicket:id="selectedItemContainer">
<div class="btn-sm btn-primary d-flex mr-2" style="cursor: auto;">
<div class="text-break" wicket:id="selectedItem"/>
<a wicket:id="deselectButton">
<i class="fa fa-xmark ml-2 text-white"></i>
</a>
</div>
</wicket:container>
</div>
</div>
<div class="row pt-3" wicket:id="tilesContainer">
<div wicket:id="header"/>
<div class="row pt-3 card-footer mx-0" wicket:id="tilesContainer">
<div wicket:id="tiles" style="min-height: 250px;">
<div wicket:id="tile"/>
</div>
</div>
<div class="d-flex" wicket:id="footerContainer">
<div class="d-flex card-header" wicket:id="footerContainer">
<div class="d-flex">
<div wicket:id="buttonToolbar"/>
</div>
Expand All @@ -40,5 +25,33 @@
</wicket:enclosure>

<div wicket:id="table"/>

</wicket:panel>

<wicket:fragment wicket:id="headerFragment">
<div class="d-flex flex-column">
<div class="card-header d-flex">
<div class="mr-auto pr-4">
<div wicket:id="viewToggle"/>
</div>
<div class="ml-auto" wicket:id="panelHeader"/>
</div>
<div class="card-header d-flex flex-column" style="min-height: 5.4rem;" wicket:id="selectedItemsContainer">
<span>
<wicket:message key="SelectObjectClassesStepPanel.selectedItem"/>
</span>
<div class="d-flex flex-wrap gap-2">
<wicket:container wicket:id="selectedItemContainer">
<div class="btn-sm btn-primary d-flex mr-2" style="cursor: auto;">
<div class="text-break" wicket:id="selectedItem"/>
<a wicket:id="deselectButton">
<i class="fa fa-xmark ml-2 text-white"></i>
</a>
</div>
</wicket:container>
</div>
</div>
</div>
</wicket:fragment>

</html>
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.evolveum.midpoint.gui.impl.component.tile;

import com.evolveum.midpoint.gui.impl.component.data.provider.SelectableBeanDataProvider;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.TemplateTile;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.gui.impl.component.data.provider.SelectableBeanObjectDataProvider;
Expand All @@ -10,11 +11,14 @@

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
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.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import java.io.Serializable;
import java.util.List;
Expand All @@ -29,20 +33,27 @@ public abstract class MultiSelectTileTablePanel<E extends Serializable, O extend
public MultiSelectTileTablePanel(
String id,
UserProfileStorage.TableId tableId) {
super(id, tableId);
this(id, Model.of(ViewToggle.TILE), tableId);
}

@Override
protected void onInitialize() {
super.onInitialize();
initLayout();
public MultiSelectTileTablePanel(
String id,
IModel<ViewToggle> viewToggle,
UserProfileStorage.TableId tableId) {
super(id, viewToggle, tableId);
}

private void initLayout(){
@Override
protected Fragment createHeaderFragment(String id) {
Fragment headerFragment = super.createHeaderFragment(id);

headerFragment.add(AttributeAppender.replace("class", ""));


WebMarkupContainer selectedItemsContainer = new WebMarkupContainer(ID_SELECTED_ITEMS_CONTAINER);
selectedItemsContainer.setOutputMarkupId(true);
selectedItemsContainer.add(new VisibleBehaviour(() -> isSelectedItemsPanelVisible()));
add(selectedItemsContainer);
headerFragment.add(selectedItemsContainer);

ListView<E> selectedContainer = new ListView<>(
ID_SELECTED_ITEM_CONTAINER,
Expand All @@ -65,6 +76,7 @@ public void onClick(AjaxRequestTarget target) {
};
selectedContainer.setOutputMarkupId(true);
selectedItemsContainer.add(selectedContainer);
return headerFragment;
}

protected boolean isSelectedItemsPanelVisible() {
Expand All @@ -78,7 +90,7 @@ public void refresh(AjaxRequestTarget target) {
}

protected Component getSelectedItemPanel() {
return get(ID_SELECTED_ITEMS_CONTAINER);
return get(createComponentPath(ID_HEADER, ID_SELECTED_ITEMS_CONTAINER));
}

protected abstract void deselectItem(E entry);
Expand All @@ -101,12 +113,24 @@ protected void onClick(AjaxRequestTarget target) {
super.onClick(target);
getModelObject().getValue().setSelected(getModelObject().isSelected());

processSelectOrDeselectItem(getModelObject());
processSelectOrDeselectItem(getModelObject().getValue());
target.add(getSelectedItemPanel());
}
};
}

protected void processSelectOrDeselectItem(TemplateTile<SelectableBean<O>> tile) {
void onSelectTableRow(IModel<SelectableBean<O>> model, AjaxRequestTarget target) {
boolean oldState = model.getObject().isSelected();

model.getObject().setSelected(!oldState);
processSelectOrDeselectItem(model.getObject());
if (model.getObject().isSelected()) {
((SelectableBeanDataProvider) getProvider()).getSelected().add(model.getObject().getValue());
}

refresh(target);
}

protected void processSelectOrDeselectItem(SelectableBean<O> value) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<!--
~ Copyright (c) 2010-2017 Evolveum
~
~ 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>
<wicket:enclosure child="tilesContainer">
<div class="d-flex flex-column flex-grow-1">
<div class="card-header" wicket:id="header"/>
<div class="row justify-content-center pt-3 card-footer mx-0" wicket:id="tilesContainer">
<div wicket:id="tiles" style="min-height: 250px;">
<div wicket:id="tile"/>
</div>
</div>
<div class="d-flex card-header" wicket:id="footerContainer">
<div class="d-flex">
<div wicket:id="buttonToolbar"/>
</div>
<div class="ml-auto align-self-end" wicket:id="tilesPaging"/>
</div>
</div>
</wicket:enclosure>

<div wicket:id="table"/>
</wicket:panel>
<wicket:fragment wicket:id="headerFragment">
<div class="d-flex">
<div class="mr-auto pr-4">
<div wicket:id="viewToggle"/>
</div>
<div class="ml-auto" wicket:id="panelHeader"/>
</div>
</wicket:fragment>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,16 @@
import com.evolveum.midpoint.gui.impl.component.search.SearchBuilder;
import com.evolveum.midpoint.gui.impl.component.search.SearchContext;

import com.evolveum.midpoint.web.component.data.BoxedTablePanel;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

Expand Down Expand Up @@ -38,7 +46,14 @@ public class SingleSelectTileTablePanel<O extends ObjectType> extends TileTableP
public SingleSelectTileTablePanel(
String id,
UserProfileStorage.TableId tableId) {
super(id, Model.of(ViewToggle.TILE), tableId);
this(id, Model.of(ViewToggle.TILE), tableId);
}

public SingleSelectTileTablePanel(
String id,
IModel<ViewToggle> viewToggle,
UserProfileStorage.TableId tableId) {
super(id, viewToggle, tableId);
}

@Override
Expand Down Expand Up @@ -167,4 +182,57 @@ private CompiledObjectCollectionView getCompiledCollectionViewFromPanelConfigura
protected ContainerPanelConfigurationType getContainerConfiguration() {
return null;
}

@Override
protected BoxedTablePanel createTablePanel(String idTable, ISortableDataProvider<SelectableBean<O>, String> provider, UserProfileStorage.TableId tableId) {
BoxedTablePanel<SelectableBean<O>> table = new BoxedTablePanel<>(idTable, provider, createColumns(), tableId) {

@Override
protected WebMarkupContainer createButtonToolbar(String id) {
return SingleSelectTileTablePanel.this.createTableButtonToolbar(id);
}

@Override
protected Component createHeader(String headerId) {
return createHeaderFragment(headerId);
}

@Override
protected String getPaginationCssClass() {
return null;
}

@Override
protected Item customizeNewRowItem(Item<SelectableBean<O>> item, IModel<SelectableBean<O>> model) {
SingleSelectTileTablePanel.this.customizeNewRowItem(model.getObject());

item.add(AttributeModifier.append("class", () ->
model.getObject().isSelected() ? "cursor-pointer table-primary" : "cursor-pointer"));
item.add(new AjaxEventBehavior("click") {
@Override
protected void onEvent(AjaxRequestTarget target) {
onSelectTableRow(model, target);
}
});
return item;
}
};
table.setShowAsCard(false);
return table;
}

protected void customizeNewRowItem(SelectableBean<O> value) {
}

void onSelectTableRow(IModel<SelectableBean<O>> model, AjaxRequestTarget target) {
boolean oldState = model.getObject().isSelected();
((SelectableBeanDataProvider) getProvider()).clearSelectedObjects();

model.getObject().setSelected(!oldState);
if (model.getObject().isSelected()) {
((SelectableBeanDataProvider) getProvider()).getSelected().add(model.getObject().getValue());
}

refresh(target);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<wicket:panel>
<wicket:enclosure child="tilesContainer">
<div class="d-flex flex-column flex-grow-1">
<div wicket:id="tilesHeader"/>
<div wicket:id="header"/>
<div class="row justify-content-center pt-3" wicket:id="tilesContainer">
<div wicket:id="tiles" style="min-height: 250px;">
<div wicket:id="tile"/>
Expand All @@ -26,4 +26,12 @@

<div wicket:id="table"/>
</wicket:panel>
<wicket:fragment wicket:id="headerFragment">
<div class="d-flex">
<div class="mr-auto pr-4">
<div wicket:id="viewToggle"/>
</div>
<div class="ml-auto" wicket:id="panelHeader"/>
</div>
</wicket:fragment>
</html>

0 comments on commit 27964dd

Please sign in to comment.