Skip to content

Commit

Permalink
JBPM-7002 - Group action buttons in list table to kebab (kiegroup#33)
Browse files Browse the repository at this point in the history
  • Loading branch information
cristianonicolai authored Mar 13, 2018
1 parent 0801f10 commit 38dfc79
Show file tree
Hide file tree
Showing 28 changed files with 816 additions and 410 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ public abstract class GenericSummary<T> extends AbstractPageRow implements Seria

protected T id;
protected String name;
private boolean selected = false;

public GenericSummary() {
}
Expand All @@ -53,14 +52,6 @@ public void setName(String name) {
this.name = name;
}

public boolean isSelected() {
return selected;
}

public void setSelected(boolean selected) {
this.selected = selected;
}

@Override
@SuppressWarnings("PMD.AvoidMultipleUnaryOperators")
public int hashCode() {
Expand Down Expand Up @@ -107,7 +98,6 @@ public String toString() {
return "GenericSummary{" +
"id=" + id +
", name='" + name + '\'' +
", selected=" + selected +
'}';
"} " + super.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,13 @@ public void updateDataOnCallback(List<T> instanceSummaries,
int startRange,
int totalRowCount,
boolean isExact) {

getListView().hideBusyIndicator();
dataProvider.updateRowCount(totalRowCount,
isExact);

dataProvider.updateRowData(startRange,
instanceSummaries);

getListView().getListGrid().setVisibleSelectedItems();
getListView().hideBusyIndicator();
}

public void addDataDisplay(final HasData<T> display) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,23 @@
import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.cell.client.NumberCell;
import com.google.gwt.cell.client.TextCell;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.Header;
import com.google.gwt.user.cellview.client.TextHeader;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasEnabled;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
import elemental2.dom.HTMLDivElement;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.dom.elemental2.Elemental2DomUtil;
import org.jboss.errai.ioc.client.api.ManagedInstance;
import org.jboss.errai.ui.shared.api.annotations.DataField;
import org.jbpm.workbench.common.client.filters.active.ActiveFilterItem;
import org.jbpm.workbench.common.client.filters.active.ActiveFilters;
import org.jbpm.workbench.common.client.resources.i18n.Constants;
import org.jbpm.workbench.common.client.util.ConditionalAction;
import org.jbpm.workbench.common.client.util.ConditionalKebabActionCell;
import org.jbpm.workbench.common.model.GenericSummary;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.ext.services.shared.preferences.GridGlobalPreferences;
Expand All @@ -54,10 +58,16 @@ public abstract class AbstractMultiGridView<T extends GenericSummary, V extends

public static final String COL_ID_SELECT = "Select";
public static final String COL_ID_ACTIONS = "Actions";
public static final int ACTIONS_COLUMN_WIDTH = 120;
public static final int CHECK_COLUMN_WIDTH = 38;
public static final int ERROR_COLUMN_WIDTH = 65;

@Inject
protected Event<NotificationEvent> notification;

@Inject
protected ManagedInstance<ConditionalKebabActionCell> conditionalKebabActionCell;

@Inject
protected PlaceManager placeManager;

Expand All @@ -84,9 +94,9 @@ public void init(final V presenter) {
}

protected void controlBulkOperations(final ListTable<T> extendedPagedTable) {
Scheduler.get().scheduleDeferred(() -> enableWidgets(Iterables.getFirst(extendedPagedTable.getRightActionsToolbar(),
null),
extendedPagedTable.hasSelectedItems()));
enableWidgets(Iterables.getFirst(extendedPagedTable.getRightActionsToolbar(),
null),
extendedPagedTable.hasSelectedItems());
}

protected void enableWidgets(final Widget widget,
Expand Down Expand Up @@ -114,7 +124,6 @@ public void loadListTable(final String key,
final ListTable<T> newListGrid = new ListTable<T>(pref);
newListGrid.setShowLastPagerButton(false);
newListGrid.setShowFastFordwardPagerButton(false);
newListGrid.dataGrid.addRedrawHandler(() -> controlBulkOperations(newListGrid));
newListGrid.setPreferencesService(userPreferencesService);
userPreferencesService.call((GridPreferencesStore preferencesStore) -> {
if (preferencesStore == null) {
Expand Down Expand Up @@ -199,12 +208,16 @@ protected ColumnMeta<T> initChecksColumn(final ListTable<T> extendedPagedTable)
false);
Column<T, Boolean> checkColumn = new Column<T, Boolean>(checkboxCell) {
@Override
public Boolean getValue(T pis) {
public Boolean getValue(T item) {
// Get the value from the selection model.
return pis.isSelected();
return extendedPagedTable.isItemSelected(item);
}
};

checkColumn.setSortable(false);
checkColumn.setDataStoreName(COL_ID_SELECT);
checkColumn.setCellStyleNames("kie-datatable-select");

Header<Boolean> selectPageHeader = new Header<Boolean>(checkboxCell) {
@Override
public Boolean getValue() {
Expand All @@ -213,21 +226,55 @@ public Boolean getValue() {
};

selectPageHeader.setUpdater(value -> {
getListGrid().getVisibleItems().forEach(pis -> extendedPagedTable.setItemSelection(pis,
value));
getListGrid().redraw();
if (value) {
extendedPagedTable.selectAllItems();
} else {
extendedPagedTable.deselectAllItems();
}
controlBulkOperations(extendedPagedTable);
});
selectPageHeader.setHeaderStyleNames("kie-datatable-select");

checkColumn.setSortable(false);
checkColumn.setDataStoreName(COL_ID_SELECT);
checkColumn.setCellStyleNames("kie-datatable-select");
checkColumn.setFieldUpdater((int index,
T model,
Boolean value) -> {
extendedPagedTable.setItemSelection(model,
value);

controlBulkOperations(extendedPagedTable);
});

ColumnMeta<T> checkColMeta = new ColumnMeta<T>(checkColumn,
"");
checkColMeta.setHeader(selectPageHeader);
return checkColMeta;
}

protected abstract List<ConditionalAction<T>> getConditionalActions();

protected ColumnMeta<T> initActionsColumn() {
final ConditionalKebabActionCell<T> cell = conditionalKebabActionCell.get();

cell.setActions(getConditionalActions());

Column<T, T> actionsColumn = new Column<T, T>(cell) {
@Override
public T getValue(T object) {
return object;
}
};
actionsColumn.setDataStoreName(COL_ID_ACTIONS);
actionsColumn.setCellStyleNames("kie-table-view-pf-actions text-center");

Header header = new TextHeader(Constants.INSTANCE.Actions());
header.setHeaderStyleNames("text-center");

final ColumnMeta<T> actionsColMeta = new ColumnMeta<T>(actionsColumn,
"");
actionsColMeta.setHeader(header);
return actionsColMeta;
}

@Override
public void setSaveFilterCallback(final BiConsumer<String, Consumer<String>> filterNameCallback) {
filters.setSaveFilterCallback(filterNameCallback);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@
import java.util.stream.StreamSupport;

import com.google.gwt.dom.client.BrowserEvents;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.InputElement;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.ColumnSortEvent.AsyncHandler;
Expand All @@ -39,9 +37,9 @@ public class ExtendedPagedTable<T extends GenericSummary> extends PagedTable<T>

private List<Column<T, ?>> ignoreSelectionColumns = new ArrayList<Column<T, ?>>();

private List<T> selectedItems;
private List<T> selectedItems = new ArrayList<T>();

private Consumer<T> selectionCallback = null;
private Consumer<T> selectionCallback;

public ExtendedPagedTable(final GridGlobalPreferences gridPreferences) {
super(DEFAULT_PAGE_SIZE,
Expand All @@ -52,7 +50,6 @@ public ExtendedPagedTable(final GridGlobalPreferences gridPreferences) {
false,
false);

selectedItems = new ArrayList<T>();
dataGrid.addColumnSortHandler(new AsyncHandler(dataGrid));
setSelectionModel(createSelectionModel(),
createNoActionColumnManager());
Expand Down Expand Up @@ -106,7 +103,7 @@ public List<T> getSelectedItems() {
return selectedItems;
}

public void setSelectedItems(List<T> selectedItems) {
protected void setSelectedItems(List<T> selectedItems) {
this.selectedItems = selectedItems;
}

Expand All @@ -115,21 +112,50 @@ public boolean isItemSelected(T item) {
}

public boolean hasSelectedItems() {
return StreamSupport.stream(this.getVisibleItems().spliterator(),
false).anyMatch(domain -> domain.isSelected());
return StreamSupport.stream(getVisibleItems().spliterator(),
false).anyMatch(item -> isItemSelected(item));
}

public void deselectAllItems() {
this.getVisibleItems().forEach(pis -> pis.setSelected(false));
selectedItems = new ArrayList<T>();
for (int i = 0; i < getVisibleItemCount(); i++) {
final T item = getVisibleItem(i);
if (selectedItems.contains(item)) {
updateSelectedColumnRow(i,
item,
false);
}
}
selectedItems.clear();
}

public void selectAllItems() {
for (int i = 0; i < getVisibleItemCount(); i++) {
final T item = getVisibleItem(i);
if (selectedItems.contains(item) == false) {
updateSelectedColumnRow(i,
item,
true);
selectedItems.add(item);
}
}
}

public void updateSelectedColumnRow(final Integer row,
final T object,
final Boolean value) {
final Column<T, Boolean> column = (Column<T, Boolean>) this.dataGrid.getColumn(0);
column.getFieldUpdater().update(row,
object,
value);
dataGrid.redrawRow(row);
}

public boolean isAllItemsSelected() {
if (this.getVisibleItemCount() == 0) {
if (getVisibleItemCount() == 0) {
return false;
} else {
return StreamSupport.stream(this.getVisibleItems().spliterator(),
false).allMatch(pis -> pis.isSelected());
return StreamSupport.stream(getVisibleItems().spliterator(),
false).allMatch(item -> isItemSelected(item));
}
}

Expand All @@ -143,11 +169,6 @@ protected NoSelectionModel<T> createSelectionModel() {
return selectionModel;
}

public void setVisibleSelectedItems() {
getVisibleItems().forEach(item -> item.setSelected(isItemSelected(item)));
redraw();
}

protected DefaultSelectionEventManager<T> createNoActionColumnManager() {
final ExtendedPagedTable<T> extendedPagedTable = this;
return DefaultSelectionEventManager.createCustomManager(new DefaultSelectionEventManager.EventTranslator<T>() {
Expand All @@ -159,35 +180,13 @@ public boolean clearCurrentSelection(CellPreviewEvent<T> event) {

@Override
public DefaultSelectionEventManager.SelectAction translateSelectionEvent(CellPreviewEvent<T> event) {
DefaultSelectionEventManager.SelectAction ret = DefaultSelectionEventManager.SelectAction.DEFAULT;
NativeEvent nativeEvent = event.getNativeEvent();
if (BrowserEvents.CLICK.equals(nativeEvent.getType())) {
if (BrowserEvents.CLICK.equals(nativeEvent.getType()) && extendedPagedTable.isSelectionIgnoreColumn(event.getColumn())) {
// Ignore if the event didn't occur in the correct column.
if (extendedPagedTable.isSelectionIgnoreColumn(event.getColumn())) {
ret = DefaultSelectionEventManager.SelectAction.IGNORE;
}
//Extension for checkboxes
Element target = nativeEvent.getEventTarget().cast();
if ("input".equals(target.getTagName().toLowerCase())) {
final InputElement input = target.cast();
if ("checkbox".equals(input.getType().toLowerCase())) {
// Synchronize the checkbox with the current selection state.
final T domain = event.getValue();
if (domain.isSelected()) {
input.setChecked(false);
setItemSelection(domain,
false);
} else {
input.setChecked(true);
setItemSelection(domain,
true);
}
extendedPagedTable.redraw();
ret = DefaultSelectionEventManager.SelectAction.IGNORE;
}
}
return DefaultSelectionEventManager.SelectAction.IGNORE;
} else {
return DefaultSelectionEventManager.SelectAction.DEFAULT;
}
return ret;
}
});
}
Expand All @@ -196,18 +195,22 @@ public void setSelectionCallback(final Consumer<T> selectionCallback) {
this.selectionCallback = selectionCallback;
}

public void setItemSelection(T item,
boolean newValue) {
if (item == null || selectedItems == null) {
public void setItemSelection(final T item,
final Boolean newValue) {
if (item == null) {
return;
}
boolean prevSelected = isItemSelected(item);
if (newValue && !prevSelected) {
selectedItems.add(item);

if (newValue == isItemSelected(item)) {
return;
}
if (!newValue && prevSelected) {

if (newValue) {
selectedItems.add(item);
} else {
selectedItems.remove(item);
}
item.setSelected(newValue);

dataGrid.redrawHeaders();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

public class ListTable<T extends GenericSummary> extends ExtendedPagedTable<T> {

public static final int ROW_HEIGHT_PX = 44;
public static final int ROW_HEIGHT_PX = 47;

public ListTable(GridGlobalPreferences gridPreferences) {
super(gridPreferences);
Expand Down
Loading

0 comments on commit 38dfc79

Please sign in to comment.