// Copyright (c) 2020-2021 Drew Lemmy
// This file is part of KristWeb 2 under GPL-3.0.
// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt
import React, { useState } from "react";
import { Modal, Tooltip, Dropdown, Menu } from "antd";
import { MenuClickEventHandler } from "rc-menu/lib/interface";
import {
EditOutlined, DeleteOutlined, InfoCircleOutlined, ExclamationCircleOutlined,
SendOutlined
} from "@ant-design/icons";
import { useTranslation } from "react-i18next";
import { WalletEditButton } from "./WalletEditButton";
import { AddWalletModal } from "./AddWalletModal";
import { WalletInfoModal } from "./info/WalletInfoModal";
import { SendTransactionModalLink } from "@comp/transactions/SendTransactionModalLink";
import { Wallet, deleteWallet } from "@wallets";
export function WalletActions({ wallet }: { wallet: Wallet }): JSX.Element {
const { t } = useTranslation();
const [editWalletVisible, setEditWalletVisible] = useState(false);
const [walletInfoVisible, setWalletInfoVisible] = useState(false);
function showWalletDeleteConfirm(): void {
Modal.confirm({
icon: <ExclamationCircleOutlined />,
title: t("myWallets.actionsDeleteConfirm"),
content: t("myWallets.actionsDeleteConfirmDescription"),
onOk: () => deleteWallet(wallet),
okText: t("dialog.yes"),
okType: "danger",
cancelText: t("dialog.no")
});
}
const onMenuClick: MenuClickEventHandler = e => {
switch (e.key) {
// "Wallet info" button
case "2":
return setWalletInfoVisible(true);
// "Delete wallet" button
case "3":
return showWalletDeleteConfirm();
}
};
return <>
<Dropdown.Button
className="table-actions wallet-actions"
buttonsRender={([leftButton, rightButton]) => [
<WalletEditButton key="leftButton" wallet={wallet}>
<Tooltip title={t("myWallets.actionsEditTooltip")}>
{React.cloneElement(leftButton as React.ReactElement<any>, {
className: "ant-btn-left", // force the border-radius
disabled: wallet.dontSave
})}
</Tooltip>
</WalletEditButton>,
rightButton
]}
trigger={["click"]}
overlay={(
<Menu onClick={onMenuClick}>
{/* Send tx button */}
<Menu.Item key="1">
<SendTransactionModalLink from={wallet}>
<div><SendOutlined /> {t("myWallets.actionsSendTransaction")}</div>
</SendTransactionModalLink>
</Menu.Item>
{/* Wallet info button */}
<Menu.Item key="2">
<InfoCircleOutlined /> {t("myWallets.actionsWalletInfo")}
</Menu.Item>
<Menu.Divider />
{/* Delete button */}
<Menu.Item key="3" danger>
<DeleteOutlined /> {t("myWallets.actionsDelete")}
</Menu.Item>
</Menu>
)}>
{/* Edit button */}
<EditOutlined />
</Dropdown.Button>
<AddWalletModal editing={wallet} visible={editWalletVisible} setVisible={setEditWalletVisible} />
<WalletInfoModal wallet={wallet} visible={walletInfoVisible} setVisible={setWalletInfoVisible} />
</>;
}