mirror of
https://github.com/bisq-network/bisq.git
synced 2025-01-19 05:44:05 +01:00
Merge pull request #5370 from jmacxx/mediation_follow_up_issues2
Disputes UI improvements
This commit is contained in:
commit
64fe6c18a4
@ -709,7 +709,8 @@ portfolio.pending.step2_seller.f2fInfo.headline=Buyer's contact information
|
|||||||
portfolio.pending.step2_seller.waitPayment.msg=The deposit transaction has at least one blockchain confirmation.\nYou need to wait until the BTC buyer starts the {0} payment.
|
portfolio.pending.step2_seller.waitPayment.msg=The deposit transaction has at least one blockchain confirmation.\nYou need to wait until the BTC buyer starts the {0} payment.
|
||||||
portfolio.pending.step2_seller.warn=The BTC buyer still has not done the {0} payment.\nYou need to wait until they have started the payment.\nIf the trade has not been completed on {1} the arbitrator will investigate.
|
portfolio.pending.step2_seller.warn=The BTC buyer still has not done the {0} payment.\nYou need to wait until they have started the payment.\nIf the trade has not been completed on {1} the arbitrator will investigate.
|
||||||
portfolio.pending.step2_seller.openForDispute=The BTC buyer has not started their payment!\nThe max. allowed period for the trade has elapsed.\nYou can wait longer and give the trading peer more time or contact the mediator for assistance.
|
portfolio.pending.step2_seller.openForDispute=The BTC buyer has not started their payment!\nThe max. allowed period for the trade has elapsed.\nYou can wait longer and give the trading peer more time or contact the mediator for assistance.
|
||||||
tradeChat.chatWindowTitle=Chat window for trade with ID ''{0}''
|
disputeChat.chatWindowTitle=Dispute chat window for trade with ID ''{0}''
|
||||||
|
tradeChat.chatWindowTitle=Trader Chat window for trade with ID ''{0}''
|
||||||
tradeChat.openChat=Open chat window
|
tradeChat.openChat=Open chat window
|
||||||
tradeChat.rules=You can communicate with your trade peer to resolve potential problems with this trade.\n\
|
tradeChat.rules=You can communicate with your trade peer to resolve potential problems with this trade.\n\
|
||||||
It is not mandatory to reply in the chat.\n\
|
It is not mandatory to reply in the chat.\n\
|
||||||
|
@ -2003,6 +2003,10 @@ textfield */
|
|||||||
-fx-font-size: 0.846em;
|
-fx-font-size: 0.846em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dispute-chat-border {
|
||||||
|
-fx-background-color: -bs-color-blue-5;
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************************************************************
|
/********************************************************************************************************************
|
||||||
* *
|
* *
|
||||||
* DAO *
|
* DAO *
|
||||||
|
@ -46,6 +46,8 @@ import javafx.scene.layout.StackPane;
|
|||||||
|
|
||||||
import javafx.beans.value.ChangeListener;
|
import javafx.beans.value.ChangeListener;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
public class DisputeChatPopup {
|
public class DisputeChatPopup {
|
||||||
public interface ChatCallback {
|
public interface ChatCallback {
|
||||||
void onCloseDisputeFromChatWindow(Dispute dispute);
|
void onCloseDisputeFromChatWindow(Dispute dispute);
|
||||||
@ -60,6 +62,7 @@ public class DisputeChatPopup {
|
|||||||
private double chatPopupStageYPosition = -1;
|
private double chatPopupStageYPosition = -1;
|
||||||
private ChangeListener<Number> xPositionListener;
|
private ChangeListener<Number> xPositionListener;
|
||||||
private ChangeListener<Number> yPositionListener;
|
private ChangeListener<Number> yPositionListener;
|
||||||
|
@Getter private Dispute selectedDispute;
|
||||||
|
|
||||||
DisputeChatPopup(DisputeManager<? extends DisputeList<Dispute>> disputeManager,
|
DisputeChatPopup(DisputeManager<? extends DisputeList<Dispute>> disputeManager,
|
||||||
CoinFormatter formatter,
|
CoinFormatter formatter,
|
||||||
@ -78,10 +81,12 @@ public class DisputeChatPopup {
|
|||||||
public void closeChat() {
|
public void closeChat() {
|
||||||
if (chatPopupStage != null)
|
if (chatPopupStage != null)
|
||||||
chatPopupStage.close();
|
chatPopupStage.close();
|
||||||
|
selectedDispute = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void openChat(Dispute selectedDispute, DisputeSession concreteDisputeSession, String counterpartyName) {
|
public void openChat(Dispute selectedDispute, DisputeSession concreteDisputeSession, String counterpartyName) {
|
||||||
closeChat();
|
closeChat();
|
||||||
|
this.selectedDispute = selectedDispute;
|
||||||
selectedDispute.getChatMessages().forEach(m -> m.setWasDisplayed(true));
|
selectedDispute.getChatMessages().forEach(m -> m.setWasDisplayed(true));
|
||||||
disputeManager.requestPersistence();
|
disputeManager.requestPersistence();
|
||||||
|
|
||||||
@ -96,7 +101,7 @@ public class DisputeChatPopup {
|
|||||||
AnchorPane.setRightAnchor(chatView, 10d);
|
AnchorPane.setRightAnchor(chatView, 10d);
|
||||||
AnchorPane.setTopAnchor(chatView, -20d);
|
AnchorPane.setTopAnchor(chatView, -20d);
|
||||||
AnchorPane.setBottomAnchor(chatView, 10d);
|
AnchorPane.setBottomAnchor(chatView, 10d);
|
||||||
|
pane.getStyleClass().add("dispute-chat-border");
|
||||||
Button closeDisputeButton = null;
|
Button closeDisputeButton = null;
|
||||||
if (!selectedDispute.isClosed() && !disputeManager.isTrader(selectedDispute)) {
|
if (!selectedDispute.isClosed() && !disputeManager.isTrader(selectedDispute)) {
|
||||||
closeDisputeButton = new AutoTooltipButton(Res.get("support.closeTicket"));
|
closeDisputeButton = new AutoTooltipButton(Res.get("support.closeTicket"));
|
||||||
@ -106,7 +111,7 @@ public class DisputeChatPopup {
|
|||||||
chatView.activate();
|
chatView.activate();
|
||||||
chatView.scrollToBottom();
|
chatView.scrollToBottom();
|
||||||
chatPopupStage = new Stage();
|
chatPopupStage = new Stage();
|
||||||
chatPopupStage.setTitle(Res.get("tradeChat.chatWindowTitle", selectedDispute.getShortTradeId())
|
chatPopupStage.setTitle(Res.get("disputeChat.chatWindowTitle", selectedDispute.getShortTradeId())
|
||||||
+ " " + selectedDispute.getRoleString());
|
+ " " + selectedDispute.getRoleString());
|
||||||
StackPane owner = MainView.getRootContainer();
|
StackPane owner = MainView.getRootContainer();
|
||||||
Scene rootScene = owner.getScene();
|
Scene rootScene = owner.getScene();
|
||||||
|
@ -350,7 +350,7 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
else if (sortedList.size() > 0)
|
else if (sortedList.size() > 0)
|
||||||
tableView.getSelectionModel().select(0);
|
tableView.getSelectionModel().select(0);
|
||||||
|
|
||||||
GUIUtil.requestFocus(filterTextField);
|
GUIUtil.requestFocus(tableView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -905,6 +905,7 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
tableView.getSelectionModel().clearSelection();
|
tableView.getSelectionModel().clearSelection();
|
||||||
|
|
||||||
tableView.getColumns().add(getContractColumn());
|
tableView.getColumns().add(getContractColumn());
|
||||||
|
maybeAddProcessColumnsForAgent(); // agent view prefers action buttons on the left
|
||||||
|
|
||||||
TableColumn<Dispute, Dispute> dateColumn = getDateColumn();
|
TableColumn<Dispute, Dispute> dateColumn = getDateColumn();
|
||||||
tableView.getColumns().add(dateColumn);
|
tableView.getColumns().add(dateColumn);
|
||||||
@ -928,8 +929,8 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
stateColumn = getStateColumn();
|
stateColumn = getStateColumn();
|
||||||
tableView.getColumns().add(stateColumn);
|
tableView.getColumns().add(stateColumn);
|
||||||
|
|
||||||
maybeAddProcessColumn();
|
// client view has the chat button to the right
|
||||||
tableView.getColumns().add(getChatColumn());
|
maybeAddChatColumnForClient();
|
||||||
|
|
||||||
tradeIdColumn.setComparator(Comparator.comparing(Dispute::getTradeId));
|
tradeIdColumn.setComparator(Comparator.comparing(Dispute::getTradeId));
|
||||||
dateColumn.setComparator(Comparator.comparing(Dispute::getOpeningDate));
|
dateColumn.setComparator(Comparator.comparing(Dispute::getOpeningDate));
|
||||||
@ -941,7 +942,11 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
tableView.getSortOrder().add(dateColumn);
|
tableView.getSortOrder().add(dateColumn);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void maybeAddProcessColumn() {
|
protected void maybeAddProcessColumnsForAgent() {
|
||||||
|
// Only relevant client views will impl it
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void maybeAddChatColumnForClient() {
|
||||||
// Only relevant client views will impl it
|
// Only relevant client views will impl it
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -957,8 +962,8 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
private TableColumn<Dispute, Dispute> getContractColumn() {
|
private TableColumn<Dispute, Dispute> getContractColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.details")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("shared.details")) {
|
||||||
{
|
{
|
||||||
setMaxWidth(150);
|
setMaxWidth(80);
|
||||||
setMinWidth(80);
|
setMinWidth(65);
|
||||||
getStyleClass().addAll("first-column", "avatar-column");
|
getStyleClass().addAll("first-column", "avatar-column");
|
||||||
setSortable(false);
|
setSortable(false);
|
||||||
}
|
}
|
||||||
@ -1037,7 +1042,7 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableColumn<Dispute, Dispute> getChatColumn() {
|
protected TableColumn<Dispute, Dispute> getChatColumn() {
|
||||||
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("support.chat")) {
|
TableColumn<Dispute, Dispute> column = new AutoTooltipTableColumn<>(Res.get("support.chat")) {
|
||||||
{
|
{
|
||||||
setMaxWidth(40);
|
setMaxWidth(40);
|
||||||
@ -1366,6 +1371,8 @@ public abstract class DisputeView extends ActivatableView<VBox, Void> {
|
|||||||
setText(newValue ? Res.get("support.closed") : Res.get("support.open"));
|
setText(newValue ? Res.get("support.closed") : Res.get("support.open"));
|
||||||
if (getTableRow() != null)
|
if (getTableRow() != null)
|
||||||
getTableRow().setOpacity(newValue && item.getBadgeCountProperty().get() == 0 ? 0.4 : 1);
|
getTableRow().setOpacity(newValue && item.getBadgeCountProperty().get() == 0 ? 0.4 : 1);
|
||||||
|
if (item.isClosed() && item == chatPopup.getSelectedDispute())
|
||||||
|
chatPopup.closeChat(); // close the chat popup when the associated ticket is closed
|
||||||
};
|
};
|
||||||
closedProperty = item.isClosedProperty();
|
closedProperty = item.isClosedProperty();
|
||||||
closedProperty.addListener(listener);
|
closedProperty.addListener(listener);
|
||||||
|
@ -348,8 +348,9 @@ public abstract class DisputeAgentView extends DisputeView implements MultipleHo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void maybeAddProcessColumn() {
|
protected void maybeAddProcessColumnsForAgent() {
|
||||||
tableView.getColumns().add(getProcessColumn());
|
tableView.getColumns().add(getProcessColumn());
|
||||||
|
tableView.getColumns().add(getChatColumn());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -66,6 +66,11 @@ public abstract class DisputeClientView extends DisputeView {
|
|||||||
return super.getFilterResult(dispute, filterString);
|
return super.getFilterResult(dispute, filterString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void maybeAddChatColumnForClient() {
|
||||||
|
tableView.getColumns().add(getChatColumn());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean senderFlag() {
|
protected boolean senderFlag() {
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user