mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 15:10:44 +01:00
Fix sorting on bonded roles view
This commit is contained in:
parent
44b02b3cbb
commit
ec26cf9156
2 changed files with 111 additions and 106 deletions
|
@ -20,47 +20,59 @@ package bisq.desktop.main.dao.bonding.roles;
|
|||
import bisq.core.dao.DaoFacade;
|
||||
import bisq.core.dao.governance.bond.BondState;
|
||||
import bisq.core.dao.governance.bond.role.BondedRole;
|
||||
import bisq.core.dao.state.model.governance.BondedRoleType;
|
||||
import bisq.core.dao.state.model.governance.Role;
|
||||
import bisq.core.locale.Res;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import lombok.Value;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Value
|
||||
class RolesListItem {
|
||||
private final DaoFacade daoFacade;
|
||||
private final BondedRole bondedRole;
|
||||
private final Role role;
|
||||
private final String buttonText;
|
||||
private final boolean isButtonVisible;
|
||||
private final BondState bondState;
|
||||
private final String bondStateString;
|
||||
private final String lockupTxId;
|
||||
private final Date lockupDate;
|
||||
|
||||
RolesListItem(BondedRole bondedRole,
|
||||
DaoFacade daoFacade) {
|
||||
RolesListItem(BondedRole bondedRole, DaoFacade daoFacade) {
|
||||
this.daoFacade = daoFacade;
|
||||
this.bondedRole = bondedRole;
|
||||
}
|
||||
|
||||
role = bondedRole.getBondedAsset();
|
||||
boolean isMyRole = daoFacade.isMyRole(role);
|
||||
bondState = bondedRole.getBondState();
|
||||
lockupTxId = bondedRole.getLockupTxId();
|
||||
lockupDate = new Date(bondedRole.getLockupDate());
|
||||
bondStateString = Res.get("dao.bond.bondState." + bondedRole.getBondState().name());
|
||||
public String getLockupTxId() {
|
||||
return this.bondedRole.getLockupTxId();
|
||||
}
|
||||
|
||||
boolean showLockup = bondedRole.getBondState() == BondState.READY_FOR_LOCKUP;
|
||||
boolean showRevoke = bondedRole.getBondState() == BondState.LOCKUP_TX_CONFIRMED;
|
||||
if (showLockup) {
|
||||
buttonText = Res.get("dao.bond.table.button.lockup");
|
||||
} else if (showRevoke) {
|
||||
buttonText = Res.get("dao.bond.table.button.revoke");
|
||||
} else {
|
||||
buttonText = "";
|
||||
}
|
||||
public Role getRole() {
|
||||
return this.bondedRole.getBondedAsset();
|
||||
}
|
||||
|
||||
isButtonVisible = isMyRole && (showLockup || showRevoke);
|
||||
public String getName() {
|
||||
return this.getRole().getName();
|
||||
}
|
||||
|
||||
public String getLink() {
|
||||
return this.getRole().getLink();
|
||||
}
|
||||
|
||||
public BondedRoleType getType() {
|
||||
return this.getRole().getBondedRoleType();
|
||||
}
|
||||
|
||||
public String getTypeAsString() {
|
||||
return this.getRole().getBondedRoleType().getDisplayString();
|
||||
}
|
||||
|
||||
public long getLockupDate() {
|
||||
return this.bondedRole.getLockupDate();
|
||||
}
|
||||
|
||||
public String getBondStateAsString() {
|
||||
return Res.get("dao.bond.bondState." + bondedRole.getBondState().name());
|
||||
}
|
||||
|
||||
public boolean isLockupButtonVisible() {
|
||||
return this.daoFacade.isMyRole(this.getRole()) && (this.bondedRole.getBondState() == BondState.READY_FOR_LOCKUP);
|
||||
}
|
||||
|
||||
public boolean isRevokeButtonVisible() {
|
||||
return this.daoFacade.isMyRole(this.getRole()) && (this.bondedRole.getBondState() == BondState.LOCKUP_TX_CONFIRMED);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,10 +28,7 @@ import bisq.desktop.util.FormBuilder;
|
|||
import bisq.desktop.util.GUIUtil;
|
||||
|
||||
import bisq.core.dao.DaoFacade;
|
||||
import bisq.core.dao.governance.bond.BondState;
|
||||
import bisq.core.dao.governance.bond.role.BondedRole;
|
||||
import bisq.core.dao.state.model.governance.BondedRoleType;
|
||||
import bisq.core.dao.state.model.governance.RoleProposal;
|
||||
import bisq.core.locale.Res;
|
||||
import bisq.core.user.Preferences;
|
||||
import bisq.core.util.coin.BsqFormatter;
|
||||
|
@ -57,7 +54,6 @@ import javafx.collections.transformation.SortedList;
|
|||
import javafx.util.Callback;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@FxmlView
|
||||
|
@ -133,39 +129,37 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private void createColumns() {
|
||||
TableColumn<RolesListItem, RolesListItem> column;
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.name"));
|
||||
column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setMinWidth(80);
|
||||
column.getStyleClass().add("first-column");
|
||||
column.setCellFactory(
|
||||
TableColumn<RolesListItem, RolesListItem> nameColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.name"));
|
||||
nameColumn.setComparator(Comparator.comparing(RolesListItem::getName, String.CASE_INSENSITIVE_ORDER));
|
||||
nameColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
nameColumn.setMinWidth(80);
|
||||
nameColumn.getStyleClass().add("first-column");
|
||||
nameColumn.setCellFactory(
|
||||
new Callback<>() {
|
||||
@Override
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem,
|
||||
RolesListItem> column) {
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem, RolesListItem> column) {
|
||||
return new TableCell<>() {
|
||||
@Override
|
||||
public void updateItem(final RolesListItem item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
if (item != null && !empty) {
|
||||
setText(item.getRole().getName());
|
||||
setText(item.getName());
|
||||
} else
|
||||
setText("");
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
tableView.getColumns().add(column);
|
||||
tableView.getColumns().add(nameColumn);
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.link"));
|
||||
column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setMinWidth(60);
|
||||
column.setCellFactory(
|
||||
TableColumn<RolesListItem, RolesListItem> linkColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.link"));
|
||||
linkColumn.setComparator(Comparator.comparing(RolesListItem::getLink));
|
||||
linkColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
linkColumn.setMinWidth(60);
|
||||
linkColumn.setCellFactory(
|
||||
new Callback<>() {
|
||||
@Override
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem,
|
||||
RolesListItem> column) {
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem, RolesListItem> column) {
|
||||
return new TableCell<>() {
|
||||
private HyperlinkWithIcon hyperlinkWithIcon;
|
||||
|
||||
|
@ -173,7 +167,7 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
public void updateItem(final RolesListItem item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
if (item != null && !empty) {
|
||||
String link = item.getRole().getLink();
|
||||
String link = item.getLink();
|
||||
hyperlinkWithIcon = new ExternalHyperlink(link);
|
||||
hyperlinkWithIcon.setOnAction(event -> GUIUtil.openWebPage(link));
|
||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("shared.openURL", link)));
|
||||
|
@ -187,32 +181,31 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
};
|
||||
}
|
||||
});
|
||||
tableView.getColumns().add(column);
|
||||
tableView.getColumns().add(linkColumn);
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondType"));
|
||||
column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setMinWidth(80);
|
||||
column.setCellFactory(
|
||||
TableColumn<RolesListItem, RolesListItem> bondTypeColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondType"));
|
||||
bondTypeColumn.setComparator(Comparator.comparing(RolesListItem::getTypeAsString));
|
||||
bondTypeColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
bondTypeColumn.setMinWidth(80);
|
||||
bondTypeColumn.setCellFactory(
|
||||
new Callback<>() {
|
||||
@Override
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem,
|
||||
RolesListItem> column) {
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem, RolesListItem> column) {
|
||||
return new TableCell<>() {
|
||||
private Hyperlink hyperlink;
|
||||
|
||||
@Override
|
||||
public void updateItem(final RolesListItem item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
|
||||
if (item != null && !empty) {
|
||||
BondedRoleType bondedRoleType = item.getRole().getBondedRoleType();
|
||||
String type = bondedRoleType.getDisplayString();
|
||||
hyperlink = new Hyperlink(type);
|
||||
hyperlink.setOnAction(event -> {
|
||||
Optional<RoleProposal> roleProposal = bondingViewUtils.getAcceptedBondedRoleProposal(item.getRole());
|
||||
new RoleDetailsWindow(bondedRoleType, roleProposal, daoFacade, bsqFormatter).show();
|
||||
});
|
||||
hyperlink.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails", type)));
|
||||
hyperlink = new Hyperlink(item.getTypeAsString());
|
||||
hyperlink.setOnAction(event -> new RoleDetailsWindow(
|
||||
item.getType(),
|
||||
bondingViewUtils.getAcceptedBondedRoleProposal(item.getRole()),
|
||||
daoFacade,
|
||||
bsqFormatter
|
||||
).show());
|
||||
hyperlink.setTooltip(new Tooltip(Res.get("tooltip.openPopupForDetails", item.getTypeAsString())));
|
||||
setGraphic(hyperlink);
|
||||
} else {
|
||||
setGraphic(null);
|
||||
|
@ -223,16 +216,16 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
};
|
||||
}
|
||||
});
|
||||
tableView.getColumns().add(column);
|
||||
tableView.getColumns().add(bondTypeColumn);
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.lockupTxId"));
|
||||
column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setMinWidth(80);
|
||||
column.setCellFactory(
|
||||
TableColumn<RolesListItem, RolesListItem> lockupTxIdColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.lockupTxId"));
|
||||
lockupTxIdColumn.setComparator(Comparator.comparing(RolesListItem::getLockupTxId, Comparator.nullsFirst(Comparator.naturalOrder())));
|
||||
lockupTxIdColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
lockupTxIdColumn.setMinWidth(80);
|
||||
lockupTxIdColumn.setCellFactory(
|
||||
new Callback<>() {
|
||||
@Override
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem,
|
||||
RolesListItem> column) {
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem, RolesListItem> column) {
|
||||
return new TableCell<>() {
|
||||
private HyperlinkWithIcon hyperlinkWithIcon;
|
||||
private Label label;
|
||||
|
@ -242,11 +235,11 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
super.updateItem(item, empty);
|
||||
|
||||
if (item != null && !empty) {
|
||||
String transactionId = item.getBondedRole().getLockupTxId();
|
||||
if (transactionId != null) {
|
||||
hyperlinkWithIcon = new ExternalHyperlink(transactionId);
|
||||
hyperlinkWithIcon.setOnAction(event -> GUIUtil.openTxInBsqBlockExplorer(transactionId, preferences));
|
||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForTx", transactionId)));
|
||||
String lockupTxId = item.getLockupTxId();
|
||||
if (lockupTxId != null) {
|
||||
hyperlinkWithIcon = new ExternalHyperlink(lockupTxId);
|
||||
hyperlinkWithIcon.setOnAction(event -> GUIUtil.openTxInBsqBlockExplorer(lockupTxId, preferences));
|
||||
hyperlinkWithIcon.setTooltip(new Tooltip(Res.get("tooltip.openBlockchainForTx", lockupTxId)));
|
||||
setGraphic(hyperlinkWithIcon);
|
||||
} else {
|
||||
label = new Label("-");
|
||||
|
@ -263,58 +256,58 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
};
|
||||
}
|
||||
});
|
||||
tableView.getColumns().add(column);
|
||||
tableView.getColumns().add(lockupTxIdColumn);
|
||||
|
||||
column = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondState"));
|
||||
column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setMinWidth(120);
|
||||
column.setCellFactory(
|
||||
TableColumn<RolesListItem, RolesListItem> bondStateColumn = new AutoTooltipTableColumn<>(Res.get("dao.bond.table.column.bondState"));
|
||||
bondStateColumn.setComparator(Comparator.comparing(RolesListItem::getBondStateAsString));
|
||||
bondStateColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
bondStateColumn.setMinWidth(120);
|
||||
bondStateColumn.setCellFactory(
|
||||
new Callback<>() {
|
||||
@Override
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem,
|
||||
RolesListItem> column) {
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem, RolesListItem> column) {
|
||||
return new TableCell<>() {
|
||||
@Override
|
||||
public void updateItem(final RolesListItem item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
if (item != null && !empty) {
|
||||
setText(item.getBondStateString());
|
||||
setText(item.getBondStateAsString());
|
||||
} else
|
||||
setText("");
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
tableView.getColumns().add(column);
|
||||
tableView.getColumns().add(bondStateColumn);
|
||||
|
||||
column = new TableColumn<>();
|
||||
column.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
column.setMinWidth(80);
|
||||
column.getStyleClass().add("last-column");
|
||||
column.setCellFactory(
|
||||
TableColumn<RolesListItem, RolesListItem> actionColumn = new TableColumn<>();
|
||||
actionColumn.setComparator(Comparator.comparing(RolesListItem::isLockupButtonVisible).thenComparing(RolesListItem::isRevokeButtonVisible));
|
||||
actionColumn.setCellValueFactory(item -> new ReadOnlyObjectWrapper<>(item.getValue()));
|
||||
actionColumn.setMinWidth(80);
|
||||
actionColumn.getStyleClass().add("last-column");
|
||||
actionColumn.setCellFactory(
|
||||
new Callback<>() {
|
||||
@Override
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem,
|
||||
RolesListItem> column) {
|
||||
public TableCell<RolesListItem, RolesListItem> call(TableColumn<RolesListItem, RolesListItem> column) {
|
||||
return new TableCell<>() {
|
||||
AutoTooltipButton button;
|
||||
|
||||
@Override
|
||||
public void updateItem(final RolesListItem item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
if (item != null && !empty && item.isButtonVisible()) {
|
||||
if (item != null && !empty && (item.isLockupButtonVisible() || item.isRevokeButtonVisible())) {
|
||||
if (button == null) {
|
||||
button = new AutoTooltipButton(item.getButtonText());
|
||||
button = new AutoTooltipButton(
|
||||
item.isLockupButtonVisible()
|
||||
? Res.get("dao.bond.table.button.lockup")
|
||||
: Res.get("dao.bond.table.button.revoke")
|
||||
);
|
||||
button.setMinWidth(70);
|
||||
button.setOnAction(e -> {
|
||||
if (item.getBondState() == BondState.READY_FOR_LOCKUP) {
|
||||
bondingViewUtils.lockupBondForBondedRole(item.getRole(),
|
||||
txId -> {
|
||||
});
|
||||
} else if (item.getBondState() == BondState.LOCKUP_TX_CONFIRMED) {
|
||||
bondingViewUtils.unLock(item.getLockupTxId(),
|
||||
txId -> {
|
||||
});
|
||||
if (item.isLockupButtonVisible() ) {
|
||||
bondingViewUtils.lockupBondForBondedRole(item.getRole(), txId -> {});
|
||||
} else if (item.isRevokeButtonVisible()) {
|
||||
bondingViewUtils.unLock(item.getLockupTxId(), txId -> {});
|
||||
}
|
||||
});
|
||||
setGraphic(button);
|
||||
|
@ -330,6 +323,6 @@ public class RolesView extends ActivatableView<GridPane, Void> {
|
|||
};
|
||||
}
|
||||
});
|
||||
tableView.getColumns().add(column);
|
||||
tableView.getColumns().add(actionColumn);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue