mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-12-21 11:25:50 -05:00
feat(gui, cli): Request quotes concurrently at all sellers (#429)
* feat(gui): Implement base structure for new swap ux - refactored file structure to match common projecte structure - implement step get bitcoin * feat(gui): Implement basic multi step modal * feat(gui): Add outline of add choose maker and offer step * feat(gui): Add receive address selector * refactor(gui): format code * feat(gui): Make Swap Overveiw interactive * feat(gui): Add action to swap amount selector to quickly go to deposit bitcoin step * progress * feat(gui, cli): Request quotes concurrently at all sellers * refresh offers occasionally, display progress * progress * feat(gui, cli): Request quotes concurrently at all sellers * refresh offers occasionally, display progress * progress, works again * allow closing dialog without warning if no funds have been locked * progress * feat(gui): Rewrite Swap Components to have flow directly on swap page * feat: log monero_rpc_pool only at >= INFO level * remove full_url, add migration to change scheme of node.monerodevs.org to http * feat: send known_quotes with WaitingForBitcoinDeposit Tauri progress event (even if our balance is too low) * lock swap lock later * refactor(monero-rpc-pool): Pass around tuple of (scheme, host, port) as nodes * refactor(gui): Remove modal for swap and adjust few pages for swap process - Moved files from swap modal to page directory - Use new layouts for init page - Use new layout for depositBTC Step - Use new layout for Offer Page * allow cancel before lock * remove unused code * dynamic layout, chips for amounts * feat(gui): Add breakpoints * remove continue button, add select button on each maker box * add GetCurrentSwapArgs tauri command to only suspend swap if one is actually running * feat(gui): Show all known quotes and disable the ones that aren't available * fix get_current_swap, kill tasks when buy_xmr is cancelled * cleanup: remove CleanupGuard * feat(gui): Add cancel button on every page * refactor(gui): Fix merge issues * refactor(gui): Unify Cancel Button insertion by using a swap base page * refactor(gui): Unify Cancel Button insertion by using a swap base page * refactor(gui): Remove deeply nested relative paths * refactor(gui): Made BaseSwapPage obsolete by moving Cancel Button to SwapStatePage * refactor(gui): Adjust condition for showing SwapSuspendAlert * fix(gui): Fetch previous monero redeem addresses repeatedly * refactor(gui): Remove QR Code from deposit and choose maker page * refactor(gui): Don't display dialog on History page * fix(gui): If no swap was running "suspend_current_swap" will still return success now, less logic in the CancelButton * get offer select working * refactor: dont display cancel button on set redeem address page * feat: add pagination to offers * refactor * emit partial events for list_sellers * refactor: remove torSlice * refactor: use sync (non tokio) mutex for approvals * throttle getSwapInfo calls * feat: add debug page back, add info in suspend dialog about what will happen * refactor: format files * refactor(gui): Remove sortMakers method and replace with method that sorts approvals * refactor(gui): Refactor swap page structure * fix(gui): Add breakpoints to swapSetupInflightPage * feat(gui): Add flag for outdated makers * refactor(gui): Reduce fetch rate for maker quotes * fix(gui): Debug Window size * no unwrap --------- Co-authored-by: b-enedict <benedict.seuss@gmail.com>
This commit is contained in:
parent
7606982de3
commit
210cc04ced
80 changed files with 1744 additions and 1153 deletions
|
|
@ -8,6 +8,9 @@ import {
|
|||
isPendingSeedSelectionApprovalEvent,
|
||||
PendingApprovalRequest,
|
||||
PendingLockBitcoinApprovalRequest,
|
||||
PendingSelectMakerApprovalRequest,
|
||||
isPendingSelectMakerApprovalEvent,
|
||||
haveFundsBeenLocked,
|
||||
PendingSeedSelectionApprovalRequest,
|
||||
} from "models/tauriModelExt";
|
||||
import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux";
|
||||
|
|
@ -18,7 +21,6 @@ import { isCliLogRelatedToSwap } from "models/cliModel";
|
|||
import { SettingsState } from "./features/settingsSlice";
|
||||
import { NodesSlice } from "./features/nodesSlice";
|
||||
import { RatesState } from "./features/ratesSlice";
|
||||
import { sortMakerList } from "utils/sortUtils";
|
||||
import {
|
||||
TauriBackgroundProgress,
|
||||
TauriBitcoinSyncProgress,
|
||||
|
|
@ -56,7 +58,7 @@ export function useResumeableSwapsCountExcludingPunished() {
|
|||
);
|
||||
}
|
||||
|
||||
/// Returns true if we have a swap that is running
|
||||
/// Returns true if we have any swap that is running
|
||||
export function useIsSwapRunning() {
|
||||
return useAppSelector(
|
||||
(state) =>
|
||||
|
|
@ -64,6 +66,46 @@ export function useIsSwapRunning() {
|
|||
);
|
||||
}
|
||||
|
||||
/// Returns true if we have a swap that is running and
|
||||
/// that swap has any funds locked
|
||||
export function useIsSwapRunningAndHasFundsLocked() {
|
||||
const swapInfo = useActiveSwapInfo();
|
||||
const swapTauriState = useAppSelector(
|
||||
(state) => state.swap.state?.curr ?? null,
|
||||
);
|
||||
|
||||
// If the swap is in the Released state, we return false
|
||||
if (swapTauriState?.type === "Released") {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If the tauri state tells us that funds have been locked, we return true
|
||||
if (haveFundsBeenLocked(swapTauriState)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If we have a database entry (swapInfo) for this swap, we return true
|
||||
if (swapInfo != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Returns true if we have a swap that is running
|
||||
export function useIsSpecificSwapRunning(swapId: string | null) {
|
||||
if (swapId == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return useAppSelector(
|
||||
(state) =>
|
||||
state.swap.state !== null &&
|
||||
state.swap.state.swapId === swapId &&
|
||||
state.swap.state.curr.type !== "Released",
|
||||
);
|
||||
}
|
||||
|
||||
export function useIsContextAvailable() {
|
||||
return useAppSelector(
|
||||
(state) => state.rpc.status === TauriContextStatusEvent.Available,
|
||||
|
|
@ -103,9 +145,7 @@ export function useAllMakers() {
|
|||
return useAppSelector((state) => {
|
||||
const registryMakers = state.makers.registry.makers || [];
|
||||
const listSellersMakers = state.makers.rendezvous.makers || [];
|
||||
const all = [...registryMakers, ...listSellersMakers];
|
||||
|
||||
return sortMakerList(all);
|
||||
return [...registryMakers, ...listSellersMakers];
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -167,6 +207,11 @@ export function usePendingLockBitcoinApproval(): PendingLockBitcoinApprovalReque
|
|||
return approvals.filter((c) => isPendingLockBitcoinApprovalEvent(c));
|
||||
}
|
||||
|
||||
export function usePendingSelectMakerApproval(): PendingSelectMakerApprovalRequest[] {
|
||||
const approvals = usePendingApprovals();
|
||||
return approvals.filter((c) => isPendingSelectMakerApprovalEvent(c));
|
||||
}
|
||||
|
||||
export function usePendingSeedSelectionApproval(): PendingSeedSelectionApprovalRequest[] {
|
||||
const approvals = usePendingApprovals();
|
||||
return approvals.filter((c) => isPendingSeedSelectionApprovalEvent(c));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue