// 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 { Button } from "antd";
import { DatabaseOutlined, PlusOutlined } from "@ant-design/icons";
import { useSelector, shallowEqual } from "react-redux";
import { RootState } from "../../store";
import { useTranslation } from "react-i18next";
import { PageLayout } from "../../layout/PageLayout";
import { AuthorisedAction } from "../../components/auth/AuthorisedAction";
import { AddWalletModal } from "./AddWalletModal";
import { WalletsTable } from "./WalletsTable";
import "./WalletsPage.less";
/** Extract the subtitle into its own component to avoid re-rendering the
* entire page when a wallet is added. */
function WalletsPageSubtitle(): JSX.Element {
const { t } = useTranslation();
const { wallets } = useSelector((s: RootState) => s.wallets, shallowEqual);
return <>{t("myWallets.walletCount", { count: Object.keys(wallets).length })}</>;
}
function WalletsPageExtraButtons(): JSX.Element {
const { t } = useTranslation();
const [createWalletVisible, setCreateWalletVisible] = useState(false);
const [addWalletVisible, setAddWalletVisible] = useState(false);
return <>
<Button icon={<DatabaseOutlined />} className="nyi">
{t("myWallets.manageBackups")}
</Button>
<AuthorisedAction encrypt onAuthed={() => setCreateWalletVisible(true)}>
<Button type="primary" icon={<PlusOutlined />}>
{t("myWallets.createWallet")}
</Button>
</AuthorisedAction>
<AddWalletModal create visible={createWalletVisible} setVisible={setCreateWalletVisible} setAddExistingVisible={setAddWalletVisible} />
<AuthorisedAction encrypt onAuthed={() => setAddWalletVisible(true)}>
<Button ghost>{t("myWallets.addExistingWallet")}</Button>
</AuthorisedAction>
<AddWalletModal visible={addWalletVisible} setVisible={setAddWalletVisible} />
</>;
}
export function WalletsPage(): JSX.Element {
return <PageLayout
siteTitleKey="myWallets.title" titleKey="myWallets.title"
subTitle={<WalletsPageSubtitle />}
extra={<WalletsPageExtraButtons />}
>
<WalletsTable />
</PageLayout>;
}