chore: Add description to Cargo.toml for GUI

This commit is contained in:
binarybaron 2024-08-09 15:26:26 +02:00
parent 8cb1e8aff0
commit 630f4c6f23
No known key found for this signature in database
GPG key ID: 99B75D3E1476A26E
5 changed files with 109 additions and 17 deletions

View file

@ -0,0 +1,87 @@
import { Button, ButtonProps, IconButton, Tooltip } from "@material-ui/core";
import CircularProgress from "@material-ui/core/CircularProgress";
import { useSnackbar } from "notistack";
import { ReactNode, useEffect, useState } from "react";
interface IpcInvokeButtonProps<T> {
onSuccess?: (data: T) => void;
onClick: () => Promise<T>;
isLoadingOverride?: boolean;
isIconButton?: boolean;
loadIcon?: ReactNode;
disabled?: boolean;
displayErrorSnackbar?: boolean;
tooltipTitle?: string;
}
export default function PromiseInvokeButton<T>({
disabled,
onSuccess,
onClick,
endIcon,
loadIcon,
isLoadingOverride,
isIconButton,
displayErrorSnackbar,
tooltipTitle,
...rest
}: IpcInvokeButtonProps<T> & ButtonProps) {
const { enqueueSnackbar } = useSnackbar();
const [isPending, setIsPending] = useState(false);
const [hasMinLoadingTimePassed, setHasMinLoadingTimePassed] = useState(false);
const isLoading = (isPending && hasMinLoadingTimePassed) || isLoadingOverride;
const actualEndIcon = isLoading
? loadIcon || <CircularProgress size="1em" />
: endIcon;
useEffect(() => {
setHasMinLoadingTimePassed(false);
setTimeout(() => setHasMinLoadingTimePassed(true), 100);
}, [isPending]);
async function handleClick(event: React.MouseEvent<HTMLButtonElement>) {
if (!isPending) {
try {
setIsPending(true);
let result = await onClick();
onSuccess?.(result);
} catch (e: unknown) {
if (displayErrorSnackbar) {
enqueueSnackbar((e as Error).message, {
autoHideDuration: 60 * 1000,
variant: "error",
});
}
} finally {
setIsPending(false);
}
}
}
const isDisabled = disabled || isLoading;
return (
<Tooltip title={tooltipTitle}>
<span>
{isIconButton ? (
<IconButton
onClick={handleClick}
disabled={isDisabled}
{...(rest as any)}
>
{actualEndIcon}
</IconButton>
) : (
<Button
onClick={handleClick}
disabled={isDisabled}
endIcon={actualEndIcon}
{...rest}
/>
)}
</span>
</Tooltip>
);
}

View file

@ -1,10 +1,16 @@
import { Button, CircularProgress, IconButton } from '@material-ui/core';
import RefreshIcon from '@material-ui/icons/Refresh';
import IpcInvokeButton from '../../IpcInvokeButton';
import { checkBitcoinBalance } from 'renderer/rpc';
import { Button, CircularProgress, IconButton } from "@material-ui/core";
import RefreshIcon from "@material-ui/icons/Refresh";
import IpcInvokeButton from "../../IpcInvokeButton";
import { checkBitcoinBalance } from "renderer/rpc";
import PromiseInvokeButton from "renderer/components/PromiseInvokeButton";
export default function WalletRefreshButton() {
return <IconButton onClick={() => checkBitcoinBalance(true)}>
<RefreshIcon />
</IconButton>
return (
<PromiseInvokeButton
endIcon={<RefreshIcon />}
isIconButton
onClick={() => checkBitcoinBalance()}
size="small"
/>
);
}

View file

@ -1,23 +1,23 @@
[package]
name = "unstoppableswap-gui-rs"
version = "0.0.0"
authors = [ "binarybaron", "einliterflasche", "unstoppableswap" ]
authors = ["binarybaron", "einliterflasche", "unstoppableswap"]
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
description = "A Tauri App"
description = "GUI for XMR<>BTC Atomic Swaps written in Rust"
[lib]
name = "unstoppableswap_gui_rs_lib"
crate-type = [ "lib", "cdylib", "staticlib" ]
crate-type = ["lib", "cdylib", "staticlib"]
[build-dependencies]
tauri-build = { version = "2.0.0-rc.1", features = [ "config-json5" ] }
tauri-build = { version = "2.0.0-rc.1", features = ["config-json5"] }
[dependencies]
anyhow = "1"
once_cell = "1"
serde = { version = "1", features = [ "derive" ] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
swap = { path = "../swap" }
tauri = { version = "2.0.0-rc.1", features = [ "config-json5" ] }
tauri = { version = "2.0.0-rc.1", features = ["config-json5"] }

View file

@ -77,6 +77,7 @@ fn setup<'a>(app: &'a mut tauri::App) -> Result<(), Box<dyn std::error::Error>>
.set(Arc::new(context))
.expect("Failed to initialize cli context");
});
Ok(())
}

View file

@ -12,10 +12,8 @@
#![forbid(unsafe_code)]
#![allow(non_snake_case)]
use crate::{
cli::command::{parse_args_and_apply_defaults, ParseResult},
common::check_latest_version,
};
use crate::cli::command::{parse_args_and_apply_defaults, ParseResult};
use crate::common::check_latest_version;
use anyhow::Result;
use std::env;