Newer
Older
CrypticOreWallet / src / pages / names / mgmt / NameActions.tsx
// Copyright (c) 2020-2021 Drew Lemmy
// This file is part of KristWeb 2 under AGPL-3.0.
// Full details: https://github.com/tmpim/KristWeb2/blob/master/LICENSE.txt
import { useMemo } from "react";
import { Button, Dropdown, Menu } from "antd";
import { DownOutlined, SwapOutlined, SendOutlined, EditOutlined } from "@ant-design/icons";

import { useTranslation } from "react-i18next";

import { KristName } from "@api/types";
import { useNameSuffix } from "@utils/currency";

import { AuthorisedAction } from "@comp/auth/AuthorisedAction";
import { OpenEditNameFn } from "./NameEditModalLink";
import { OpenSendTxFn } from "@comp/transactions/SendTransactionModalLink";

interface Props {
  name: KristName;
  isOwn: boolean;

  openNameEdit: OpenEditNameFn;
  openSendTx: OpenSendTxFn;
}

export function NameActions({
  name,
  isOwn,

  openNameEdit,
  openSendTx
}: Props): JSX.Element {
  const { t } = useTranslation();

  const nameSuffix = useNameSuffix();
  const nameWithSuffix = `${name.name}.${nameSuffix}`;

  // The dropdown menu, used if we own the name
  const buttonMenu = useMemo(() => isOwn
    ? <Menu>
      {/* Transfer Krist button */}
      <Menu.Item key="1">
        <AuthorisedAction
          onAuthed={() => openSendTx(undefined, nameWithSuffix)}
        >
          <div><SwapOutlined /> {t("names.actionsTransferKrist")}</div>
        </AuthorisedAction>
      </Menu.Item>

      <Menu.Divider />

      {/* Update A record */}
      <Menu.Item key="2">
        <AuthorisedAction
          onAuthed={() => openNameEdit("update", name.name, name.a)}
        >
          <div><EditOutlined /> {t("names.actionsUpdateARecord")}</div>
        </AuthorisedAction>
      </Menu.Item>

      {/* Transfer name */}
      <Menu.Item key="3" danger>
        <AuthorisedAction
          onAuthed={() => openNameEdit("transfer", name.name)}
        >
          <div><SendOutlined /> {t("names.actionsTransferName")}</div>
        </AuthorisedAction>
      </Menu.Item>
    </Menu>
    : undefined,
  [t, isOwn, name.a, name.name, nameWithSuffix, openSendTx, openNameEdit]);

  const actions = useMemo(() => isOwn
    ? (
      // Actions dropdown (own name)
      <Dropdown
        className="table-actions name-actions"
        trigger={["click"]}
        overlay={buttonMenu!}
      >
        <Button>
          {t("names.actions")} <DownOutlined />
        </Button>
      </Dropdown>
    )
    : (
      // Send transaction button (not own name)
      <AuthorisedAction
        onAuthed={() => openSendTx(undefined, nameWithSuffix)}
      >
        <Button
          className="table-actions name-actions"
          icon={<SendOutlined />}
        >
          {t("names.actionsSendKrist")}
        </Button>
      </AuthorisedAction>
    ),
  [t, buttonMenu, isOwn, nameWithSuffix, openSendTx]);

  return actions;
}