diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties
index 3189950d63..9d5e9d78a8 100644
--- a/core/src/main/resources/i18n/displayStrings.properties
+++ b/core/src/main/resources/i18n/displayStrings.properties
@@ -804,6 +804,7 @@ support.tab.support=Support tickets
support.tab.ArbitratorsSupportTickets=Arbitrator's support tickets
support.tab.TradersSupportTickets=Trader's support tickets
support.filter=Filter list
+support.filter.prompt=Enter trade ID, date, onion address or account data
support.noTickets=There are no open tickets
support.sendingMessage=Sending Message...
support.receiverNotOnline=Receiver is not online. Message is saved to his mailbox.
diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.fxml b/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.fxml
index 110db01091..6300400bdd 100644
--- a/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.fxml
+++ b/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.fxml
@@ -18,8 +18,12 @@
-->
+
+
+
+
-
+
+
+
+
+
+
diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java b/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java
index 6cb20342d3..0778f8177c 100644
--- a/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java
+++ b/desktop/src/main/java/bisq/desktop/main/portfolio/closedtrades/ClosedTradesView.java
@@ -22,6 +22,7 @@ import bisq.desktop.common.view.FxmlView;
import bisq.desktop.components.AutoTooltipButton;
import bisq.desktop.components.AutoTooltipLabel;
import bisq.desktop.components.HyperlinkWithIcon;
+import bisq.desktop.components.InputTextField;
import bisq.desktop.components.PeerInfoIcon;
import bisq.desktop.main.overlays.windows.OfferDetailsWindow;
import bisq.desktop.main.overlays.windows.TradeDetailsWindow;
@@ -33,6 +34,7 @@ import bisq.core.locale.Res;
import bisq.core.monetary.Price;
import bisq.core.monetary.Volume;
import bisq.core.offer.OpenOffer;
+import bisq.core.trade.Contract;
import bisq.core.trade.Tradable;
import bisq.core.trade.Trade;
import bisq.core.user.Preferences;
@@ -57,13 +59,18 @@ import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.Tooltip;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Pane;
+import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.geometry.Insets;
import javafx.beans.property.ReadOnlyObjectWrapper;
+import javafx.beans.value.ChangeListener;
import javafx.collections.ObservableList;
+import javafx.collections.transformation.FilteredList;
import javafx.collections.transformation.SortedList;
import javafx.util.Callback;
@@ -73,19 +80,31 @@ import java.util.Comparator;
@FxmlView
public class ClosedTradesView extends ActivatableViewAndModel {
private final boolean useDevPrivilegeKeys;
+
@FXML
TableView tableView;
@FXML
TableColumn priceColumn, amountColumn, volumeColumn,
marketColumn, directionColumn, dateColumn, tradeIdColumn, stateColumn, avatarColumn;
@FXML
+ HBox footerBox;
+ @FXML
+ AutoTooltipLabel filterLabel;
+ @FXML
+ InputTextField filterTextField;
+ @FXML
+ Pane spacer;
+ @FXML
AutoTooltipButton exportButton;
+
private final OfferDetailsWindow offerDetailsWindow;
private Preferences preferences;
private final BSFormatter formatter;
private final TradeDetailsWindow tradeDetailsWindow;
private final PrivateNotificationManager privateNotificationManager;
private SortedList sortedList;
+ private FilteredList filteredList;
+ private ChangeListener filterTextFieldListener;
@Inject
public ClosedTradesView(ClosedTradesViewModel model,
@@ -175,13 +194,24 @@ public class ClosedTradesView extends ActivatableViewAndModel applyFilteredListPredicate(filterTextField.getText());
+ footerBox.setSpacing(5);
+ HBox.setHgrow(spacer, Priority.ALWAYS);
exportButton.updateText(Res.get("shared.exportCSV"));
+ HBox.setMargin(exportButton, new Insets(0, 10, 0, 0));
}
@Override
protected void activate() {
- sortedList = new SortedList<>(model.getList());
+ filteredList = new FilteredList<>(model.getList());
+
+ sortedList = new SortedList<>(filteredList);
sortedList.comparatorProperty().bind(tableView.comparatorProperty());
+
tableView.setItems(sortedList);
exportButton.setOnAction(event -> {
@@ -208,14 +238,52 @@ public class ClosedTradesView extends ActivatableViewAndModel {
+ if (filterString.isEmpty())
+ return true;
+
+ Offer offer = item.getTradable().getOffer();
+ boolean matchesId = offer.getId().contains(filterString);
+ boolean matchesOfferDate = formatter.formatDate(offer.getDate()).contains(filterString);
+ boolean isMakerOnion = offer.getMakerNodeAddress().getFullAddress().contains(filterString);
+
+ if (item.getTradable() instanceof Trade) {
+ boolean isBuyerOnion = false;
+ boolean isSellerOnion = false;
+ boolean matchesBuyersPaymentAccountData = false;
+ boolean matchesSellersPaymentAccountData = false;
+
+ Trade trade = (Trade) item.getTradable();
+ boolean matchesTradeDate = formatter.formatDate(trade.getTakeOfferDate()).contains(filterString);
+ Contract contract = trade.getContract();
+ if (contract != null) {
+ isBuyerOnion = contract.getBuyerNodeAddress().getFullAddress().contains(filterString);
+ isSellerOnion = contract.getSellerNodeAddress().getFullAddress().contains(filterString);
+ matchesBuyersPaymentAccountData = contract.getBuyerPaymentAccountPayload().getPaymentDetails().contains(filterString);
+ matchesSellersPaymentAccountData = contract.getSellerPaymentAccountPayload().getPaymentDetails().contains(filterString);
+ }
+ return matchesId || matchesOfferDate || isMakerOnion ||
+ matchesTradeDate || isBuyerOnion || isSellerOnion ||
+ matchesBuyersPaymentAccountData || matchesSellersPaymentAccountData;
+ } else {
+ return matchesId || matchesOfferDate || isMakerOnion;
+ }
+ });
+ }
private void setTradeIdColumnCellFactory() {
tradeIdColumn.getStyleClass().add("first-column");