View on GitHub
File Changes
m
+2/-1
### Features

                      
- Implemented cancel pending transaction V2 API endpoint and UI for legacy wallets ([PR 1651](https://github.com/input-output-hk/daedalus/pull/1651))
+
- Implemented cancel pending transaction V2 API endpoint and UI ([PR 1633](https://github.com/input-output-hk/daedalus/pull/1633))
- Implemented "Transfer funds" wizard for Incentivized Testnet version of Daedalus ([PR 1634](https://github.com/input-output-hk/daedalus/pull/1634), [PR 1659](https://github.com/input-output-hk/daedalus/pull/1659))
- Implemented "Network info" overlay ([PR 1655](https://github.com/input-output-hk/daedalus/pull/1655))
- Disable "Manual update" notification for Incentivized Testnet version of Daedalus ([PR 1652](https://github.com/input-output-hk/daedalus/pull/1652))
- Implemented "Incentivized Testnet" theme for Incentivized Testnet version of Daedalus ([PR 1620](https://github.com/input-output-hk/daedalus/pull/1620))
- Removed "Decentralization countdown", "Decentralization info", and "Staking epochs" screens for Incentivized Testnet Daedalus version ([PR 1625](https://github.com/input-output-hk/daedalus/pull/1625))
- Implemented address validator ([PR 1609](https://github.com/input-output-hk/daedalus/pull/1609), [PR 1618](https://github.com/input-output-hk/daedalus/pull/1618))
-
- Added "frontend-only" mode utility that has no dependency on nix ([PR 1583](https://github.com/input-output-hk/daedalus/pull/1583))
+
- Add "frontend-only" mode utility that has no dependency on nix ([PR 1583](https://github.com/input-output-hk/daedalus/pull/1583))
- Added Jormungandr support for Cardano V2 API ([PR 1567](https://github.com/input-output-hk/daedalus/pull/1567)
- Integrated Cardano V2 API endpoints ([PR 1548](https://github.com/input-output-hk/daedalus/pull/1548), [PR 1551](https://github.com/input-output-hk/daedalus/pull/1551), [PR 1552](https://github.com/input-output-hk/daedalus/pull/1552), [PR 1553](https://github.com/input-output-hk/daedalus/pull/1553), [PR 1555](https://github.com/input-output-hk/daedalus/pull/1555), [PR 1556](https://github.com/input-output-hk/daedalus/pull/1556), [PR 1557](https://github.com/input-output-hk/daedalus/pull/1557), [PR 1558](https://github.com/input-output-hk/daedalus/pull/1558), [PR 1559](https://github.com/input-output-hk/daedalus/pull/1559), [PR 1560](https://github.com/input-output-hk/daedalus/pull/1560), [PR 1575](https://github.com/input-output-hk/daedalus/pull/1575), [PR 1577](https://github.com/input-output-hk/daedalus/pull/1577), [PR 1579](https://github.com/input-output-hk/daedalus/pull/1579), [PR 1604](https://github.com/input-output-hk/daedalus/pull/1604), [PR 1637](https://github.com/input-output-hk/daedalus/pull/1637), [PR 1639](https://github.com/input-output-hk/daedalus/pull/1639), [PR 1641](https://github.com/input-output-hk/daedalus/pull/1641))

                      
+
// @flow
+
import React, { Component } from 'react';
+
import { observer } from 'mobx-react';
+
import classnames from 'classnames';
+
import { defineMessages, intlShape } from 'react-intl';
+
import Dialog from '../../widgets/Dialog';
+
import styles from './CancelTransactionConfirmationDialog.scss';
+

                      
+
const messages = defineMessages({
+
  headline: {
+
    id: 'cancel.transaction.confirmation.dialog.headline',
+
    defaultMessage: '!!!Confirm transaction cancellation?',
+
    description:
+
      'Headline for the pending transaction cancellation confirmation dialog.',
+
  },
+
  content1: {
+
    id: 'cancel.transaction.confirmation.dialog.content1',
+
    defaultMessage:
+
      '!!!This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.',
+
    description:
+
      'Content for the pending transaction cancellation confirmation dialog.',
+
  },
+
  content2: {
+
    id: 'cancel.transaction.confirmation.dialog.content2',
+
    defaultMessage:
+
      '!!!To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.',
+
    description:
+
      'Content for the pending transaction cancellation confirmation dialog.',
+
  },
+
  cancelButtonLabel: {
+
    id: 'cancel.transaction.confirmation.dialog.button.backLabel',
+
    defaultMessage: '!!!No, keep the transaction pending',
+
    description:
+
      '"Cancel" button label for the pending transaction cancellation confirmation dialog.',
+
  },
+
  confirmButtonLabel: {
+
    id: 'cancel.transaction.confirmation.dialog.button.confirmLabel',
+
    defaultMessage: '!!!Yes, cancel the transaction',
+
    description:
+
      '"Confirm" button label for the pending transaction cancellation confirmation dialog.',
+
  },
+
});
+

                      
+
type Props = {
+
  onConfirm: Function,
+
  onCancel: Function,
+
};
+

                      
+
@observer
+
export default class CancelTransactionConfirmationDialog extends Component<Props> {
+
  static contextTypes = {
+
    intl: intlShape.isRequired,
+
  };
+

                      
+
  render() {
+
    const { intl } = this.context;
+
    const { onConfirm, onCancel } = this.props;
+

                      
+
    const dialogClasses = classnames([styles.component, 'ConfirmDialog']);
+

                      
+
    const confirmButtonClasses = classnames([
+
      'confirmButton',
+
      'attention',
+
      styles.confirmButton,
+
    ]);
+

                      
+
    const actions = [
+
      {
+
        className: 'cancelButton',
+
        label: intl.formatMessage(messages.cancelButtonLabel),
+
        onClick: onCancel,
+
      },
+
      {
+
        className: confirmButtonClasses,
+
        label: intl.formatMessage(messages.confirmButtonLabel),
+
        primary: true,
+
        onClick: onConfirm,
+
      },
+
    ];
+

                      
+
    return (
+
      <Dialog
+
        className={dialogClasses}
+
        title={intl.formatMessage(messages.headline)}
+
        actions={actions}
+
        closeOnOverlayClick={false}
+
        onClose={onCancel}
+
      >
+
        <p>{intl.formatMessage(messages.content1)}</p>
+
        <p>
+
          <strong>{intl.formatMessage(messages.content2)}</strong>
+
        </p>
+
      </Dialog>
+
    );
+
  }
+
}
+
.component {
+
  color: var(--theme-dialog-text-color);
+
  font-family: var(--font-light);
+
  width: 540px;
+

                      
+
  p {
+
    line-height: 1.38;
+

                      
+
    &:not(:last-child) {
+
      padding-bottom: 10px;
+
    }
+
  }
+
}
import type { TransactionState } from '../../../domains/WalletTransaction';
import { getNetworkExplorerUrl } from '../../../utils/network';
import { PENDING_TIME_LIMIT } from '../../../config/txnsConfig';
+
import CancelTransactionConfirmationDialog from './CancelTransactionConfirmationDialog';

                      
/* eslint-disable consistent-return */

                      
  cancelPendingTxnNote: {
    id: 'wallet.transaction.pending.cancelPendingTxnNote',
    defaultMessage:
-
      '!!!This transaction has been pending for too long. We recommend you cancel it.',
+
      '!!!This transaction has been pending for a long time. To release the funds used by this transaction, you can try canceling it.',
    description: 'Note to cancel a transaction that has been pending too long',
  },
  supportArticleLink: {
    id: 'wallet.transaction.pending.supportArticleLink',
-
    defaultMessage: '!!!Read why',
-
    description:
-
      'Link to support article explaining transactions stuck pending',
+
    defaultMessage: '!!!Why should I cancel this transaction?',
+
    description: 'Link to support article for canceling a pending transaction',
+
  },
+
  supportArticleUrl: {
+
    id: 'wallet.transaction.pending.supportArticleUrl',
+
    defaultMessage:
+
      '!!!https://iohk.zendesk.com/hc/en-us/articles/360038113814',
+
    description: 'Url to support article for canceling a pending transaction',
  },
  noInputAddressesLabel: {
    id: 'wallet.transaction.noInputAddressesLabel',
  walletId: string,
};

                      
-
export default class Transaction extends Component<Props> {
+
type State = {
+
  showConfirmationDialog: boolean,
+
};
+

                      
+
export default class Transaction extends Component<Props, State> {
  static contextTypes = {
    intl: intlShape.isRequired,
  };

                      
+
  state = {
+
    showConfirmationDialog: false,
+
  };
+

                      
  toggleDetails() {
    const { onDetailsToggled } = this.props;
    if (onDetailsToggled) onDetailsToggled();
  }

                      
  handleOpenSupportArticle = () => {
+
    const { intl } = this.context;
    const { onOpenExternalLink } = this.props;
-
    const articleUrl = 'https://daedaluswallet.io';
+
    const supportArticleUrl = intl.formatMessage(messages.supportArticleUrl);
    if (!onOpenExternalLink) return null;
-
    return onOpenExternalLink(articleUrl);
+
    return onOpenExternalLink(supportArticleUrl);
  };

                      
-
  deletePendingTransaction = () => {
+
  deletePendingTransaction = async () => {
    const { data, walletId } = this.props;
    const { id: transactionId, state } = data;
-

                      
    if (state !== TransactionStates.PENDING) {
-
      return null;
+
      return this.hideConfirmationDialog();
    }
-

                      
-
    return this.props.deletePendingTransaction({
+
    await this.props.deletePendingTransaction({
      walletId,
      transactionId,
    });
+
    return this.hideConfirmationDialog();
+
  };
+

                      
+
  showConfirmationDialog = () => {
+
    this.setState({ showConfirmationDialog: true });
+
  };
+

                      
+
  hideConfirmationDialog = () => {
+
    this.setState({ showConfirmationDialog: false });
  };

                      
  getTimePending = (txnDate: Date): number => {
          </span>
        </div>
        <div>
-
          <CancelTransactionButton onClick={this.deletePendingTransaction} />
+
          <CancelTransactionButton onClick={this.showConfirmationDialog} />
        </div>
      </Fragment>
    );
      formattedWalletAmount,
      onOpenExternalLink,
      isExpanded,
+
      network,
    } = this.props;
    const { intl } = this.context;

                      
+
    const { showConfirmationDialog } = this.state;
+

                      
    const canOpenExplorer = onOpenExternalLink;

                      
    const isPendingTransaction = state === TransactionStates.PENDING;
    };

                      
    return (
-
      <div
-
        onClick={this.toggleDetails.bind(this)}
-
        className={componentStyles}
-
        role="presentation"
-
        aria-hidden
-
      >
-
        <div className={styles.toggler}>
-
          <TransactionTypeIcon
-
            exceedsPendingTimeLimit={exceedsPendingTimeLimit}
-
            iconType={iconType}
+
      <div>
+
        {showConfirmationDialog && (
+
          <CancelTransactionConfirmationDialog
+
            network={network}
+
            onCancel={this.hideConfirmationDialog}
+
            onConfirm={this.deletePendingTransaction}
          />
-

                      
-
          <div className={styles.togglerContent}>
-
            <div className={styles.header}>
-
              <div className={styles.title}>
-
                {data.type === TransactionTypes.EXPEND
-
                  ? intl.formatMessage(messages.sent, { currency })
-
                  : intl.formatMessage(messages.received, { currency })}
-
              </div>
-
              <div className={styles.amount}>
-
                {// hide currency (we are showing symbol instead)
-
                formattedWalletAmount(data.amount, false)}
-
                <SVGInline svg={symbol} className={styles.currencySymbol} />
-
              </div>
-
            </div>
-

                      
-
            <div className={styles.details}>
-
              <div className={styles.type}>
-
                {intl.formatMessage(messages.type, { currency })},{' '}
-
                {moment(data.date).format('hh:mm:ss A')}
-
              </div>
-
              {this.renderTxnStateTag()}
-
            </div>
-
          </div>
-
        </div>
-

                      
-
        {/* ==== Toggleable Transaction Details ==== */}
-
        <div className={contentStyles}>
+
        )}
+
        {!showConfirmationDialog && (
          <div
-
            className={detailsStyles}
-
            onClick={event => event.stopPropagation()}
+
            onClick={this.toggleDetails.bind(this)}
+
            className={componentStyles}
            role="presentation"
            aria-hidden
          >
-
            <div>
-
              <h2>{intl.formatMessage(messages.fromAddresses)}</h2>
-

                      
-
              {fromAddresses(data.addresses.from, data.id)}
-

                      
-
              <h2>{intl.formatMessage(messages.toAddresses)}</h2>
-
              {data.addresses.to.map((address, addressIndex) => (
-
                <div
-
                  // eslint-disable-next-line react/no-array-index-key
-
                  key={`${data.id}-to-${address}-${addressIndex}`}
-
                  className={styles.addressRow}
-
                >
-
                  <span
-
                    role="presentation"
-
                    aria-hidden
-
                    className={styles.address}
-
                    onClick={this.handleOpenExplorer.bind(
-
                      this,
-
                      'address',
-
                      address
-
                    )}
-
                  >
-
                    {address}
-
                    <SVGInline svg={externalLinkIcon} />
-
                  </span>
+
            <div className={styles.toggler}>
+
              <TransactionTypeIcon
  .pendingTxnNote {
    font-family: var(--font-light);
    font-size: 16px;
+
    line-height: 1.4;
    margin-bottom: 20px;
    margin-top: 20px;

                      
  .pendingTxnIcon {
    & > svg {
      height: 9px;
+
      width: 2px;
      path {
        fill: var(--theme-icon-transaction-type-color);
      }
-
      width: 2px;
    }
  }
}
  "automaticUpdate.postpone.button.label": "!!!Postpone",
  "automaticUpdate.title": "!!!Software update is available",
  "backToTopButton.label": "!!!Back to top",
+
  "cancel.transaction.confirmation.dialog.button.backLabel": "!!!No, leave transaction pending",
+
  "cancel.transaction.confirmation.dialog.button.confirmLabel": "!!!Yes, cancel transaction",
+
  "cancel.transaction.confirmation.dialog.content1": "!!!This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.",
+
  "cancel.transaction.confirmation.dialog.content2": "!!!To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.",
+
  "cancel.transaction.confirmation.dialog.headline": "!!!Confirm transaction cancellation?",
  "cardano.node.sync.status.blocksSynced": "!!!Blocks synced {percentage}%",
  "daedalus.diagnostics.dialog.availableDiskSpace": "Available disk space",
  "daedalus.diagnostics.dialog.blankScreenFix": "'Blank Screen Fix' active",
  "wallet.transaction.pending.cancelPendingTxnNote": "!!!This transaction has been pending for too long. We recommend you cancel it.",
  "wallet.transaction.pending.cancelTransactionButton": "!!!Cancel pending transaction",
  "wallet.transaction.pending.supportArticleLink": "!!!Read why",
+
  "wallet.transaction.pending.supportArticleUrl": "!!!https://iohk.zendesk.com/hc/en-us/articles/360038113814",
  "wallet.transaction.received": "!!!{currency} received",
  "wallet.transaction.sent": "!!!{currency} sent",
  "wallet.transaction.state.confirmed": "!!!Transaction confirmed",
    ],
    "path": "source/renderer/app/components/wallet/transactions/CancelTransactionButton.json"
  },
+
  {
+
    "descriptors": [
+
      {
+
        "defaultMessage": "!!!Confirm transaction cancellation?",
+
        "description": "Headline for the pending transaction cancellation confirmation dialog.",
+
        "end": {
+
          "column": 3,
+
          "line": 15
+
        },
+
        "file": "source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js",
+
        "id": "cancel.transaction.confirmation.dialog.headline",
+
        "start": {
+
          "column": 12,
+
          "line": 10
+
        }
+
      },
+
      {
+
        "defaultMessage": "!!!This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.",
+
        "description": "Content for the pending transaction cancellation confirmation dialog.",
+
        "end": {
+
          "column": 3,
+
          "line": 22
+
        },
+
        "file": "source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js",
+
        "id": "cancel.transaction.confirmation.dialog.content1",
+
        "start": {
+
          "column": 12,
+
          "line": 16
+
        }
+
      },
+
      {
+
        "defaultMessage": "!!!To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.",
+
        "description": "Content for the pending transaction cancellation confirmation dialog.",
+
        "end": {
+
          "column": 3,
+
          "line": 29
+
        },
+
        "file": "source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js",
+
        "id": "cancel.transaction.confirmation.dialog.content2",
+
        "start": {
+
          "column": 12,
+
          "line": 23
+
        }
+
      },
+
      {
+
        "defaultMessage": "!!!No, keep the transaction pending",
+
        "description": "\"Cancel\" button label for the pending transaction cancellation confirmation dialog.",
+
        "end": {
+
          "column": 3,
+
          "line": 35
+
        },
+
        "file": "source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js",
+
        "id": "cancel.transaction.confirmation.dialog.button.backLabel",
+
        "start": {
+
          "column": 21,
+
          "line": 30
+
        }
+
      },
+
      {
+
        "defaultMessage": "!!!Yes, cancel the transaction",
+
        "description": "\"Confirm\" button label for the pending transaction cancellation confirmation dialog.",
+
        "end": {
+
          "column": 3,
+
          "line": 41
+
        },
+
        "file": "source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.js",
+
        "id": "cancel.transaction.confirmation.dialog.button.confirmLabel",
+
        "start": {
+
          "column": 22,
+
          "line": 36
+
        }
+
      }
+
    ],
+
    "path": "source/renderer/app/components/wallet/transactions/CancelTransactionConfirmationDialog.json"
+
  },
  {
    "descriptors": [
      {
        "defaultMessage": "!!!Card payment",
        "description": "Transaction type shown for credit card payments.",
        "end": {
          "column": 3,
-
          "line": 30
+
          "line": 31
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.type.card",
        "start": {
          "column": 8,
-
          "line": 26
+
          "line": 27
        }
      },
      {
        "defaultMessage": "!!!{currency} transaction",
        "description": "Transaction type shown for {currency} transactions.",
        "end": {
          "column": 3,
-
          "line": 35
+
          "line": 36
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.type",
        "start": {
          "column": 8,
-
          "line": 31
+
          "line": 32
        }
      },
      {
        "defaultMessage": "!!!Exchange",
        "description": "Transaction type shown for money exchanges between currencies.",
        "end": {
          "column": 3,
-
          "line": 41
+
          "line": 42
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.type.exchange",
        "start": {
          "column": 12,
-
          "line": 36
+
          "line": 37
        }
      },
      {
        "defaultMessage": "!!!Transaction ID",
        "description": "Transaction ID.",
        "end": {
          "column": 3,
-
          "line": 46
+
          "line": 47
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.transactionId",
        "start": {
          "column": 17,
-
          "line": 42
+
          "line": 43
        }
      },
      {
        "defaultMessage": "!!!Conversion rate",
        "description": "Conversion rate.",
        "end": {
          "column": 3,
-
          "line": 51
+
          "line": 52
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.conversion.rate",
        "start": {
          "column": 18,
-
          "line": 47
+
          "line": 48
        }
      },
      {
        "defaultMessage": "!!!{currency} sent",
        "description": "Label \"{currency} sent\" for the transaction.",
        "end": {
          "column": 3,
-
          "line": 56
+
          "line": 57
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.sent",
        "start": {
          "column": 8,
-
          "line": 52
+
          "line": 53
        }
      },
      {
        "defaultMessage": "!!!{currency} received",
        "description": "Label \"{currency} received\" for the transaction.",
        "end": {
          "column": 3,
-
          "line": 61
+
          "line": 62
        },
        "file": "source/renderer/app/components/wallet/transactions/Transaction.js",
        "id": "wallet.transaction.received",
        "start": {
          "column": 12,
-
          "line": 57
+
          "line": 58
        }
      },
      {
        "defaultMessage": "!!!From address",
        "description": "From address",
        "end": {
          "column": 3,
-
          "line": 66
+
          "line": 67
  "automaticUpdate.postpone.button.label": "Postpone until Daedalus restart",
  "automaticUpdate.title": "Software update is available",
  "backToTopButton.label": "Back to top",
+
  "cancel.transaction.confirmation.dialog.button.backLabel": "No, leave transaction pending",
+
  "cancel.transaction.confirmation.dialog.button.confirmLabel": "Yes, cancel transaction",
+
  "cancel.transaction.confirmation.dialog.content1": "This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.",
+
  "cancel.transaction.confirmation.dialog.content2": "To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.",
+
  "cancel.transaction.confirmation.dialog.headline": "Confirm transaction cancellation?",
  "cardano.node.sync.status.blocksSynced": "Blocks synced {percentage}%",
  "daedalus.diagnostics.dialog.availableDiskSpace": "Available disk space",
  "daedalus.diagnostics.dialog.blankScreenFix": "'Blank Screen Fix' active",
  "wallet.transaction.addresses.to": "To addresses",
  "wallet.transaction.conversion.rate": "Conversion rate",
  "wallet.transaction.noInputAddressesLabel": "No addresses",
-
  "wallet.transaction.pending.cancelPendingTxnNote": "This transaction has been pending for too long. We recommend you cancel it.",
+
  "wallet.transaction.pending.cancelPendingTxnNote": "This transaction has been pending for a long time. To release the funds used by this transaction, you can try canceling it.",
  "wallet.transaction.pending.cancelTransactionButton": "Cancel pending transaction",
-
  "wallet.transaction.pending.supportArticleLink": "Read why",
+
  "wallet.transaction.pending.supportArticleLink": "Why should I cancel this transaction?",
+
  "wallet.transaction.pending.supportArticleUrl": "https://iohk.zendesk.com/hc/en-us/articles/360038113814",
  "wallet.transaction.received": "{currency} received",
  "wallet.transaction.sent": "{currency} sent",
  "wallet.transaction.state.confirmed": "Transaction confirmed",
  "automaticUpdate.postpone.button.label": "!!!Postpone",
  "automaticUpdate.title": "!!!Software update is available",
  "backToTopButton.label": "!!!Back to top",
+
  "cancel.transaction.confirmation.dialog.button.backLabel": "!!!No, leave transaction pending",
+
  "cancel.transaction.confirmation.dialog.button.confirmLabel": "!!!Yes, cancel transaction",
+
  "cancel.transaction.confirmation.dialog.content1": "!!!This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.",
+
  "cancel.transaction.confirmation.dialog.content2": "!!!To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.",
+
  "cancel.transaction.confirmation.dialog.headline": "!!!Confirm transaction cancellation?",
  "cardano.node.sync.status.blocksSynced": "!!!Blocks synced {percentage}%",
  "daedalus.diagnostics.dialog.availableDiskSpace": "Available disk space",
  "daedalus.diagnostics.dialog.blankScreenFix": "'Blank Screen Fix' active",
  "wallet.transaction.pending.cancelPendingTxnNote": "!!!This transaction has been pending for too long. We recommend you cancel it.",
  "wallet.transaction.pending.cancelTransactionButton": "!!!Cancel pending transaction",
  "wallet.transaction.pending.supportArticleLink": "!!!Read why",
+
  "wallet.transaction.pending.supportArticleUrl": "!!!https://iohk.zendesk.com/hc/en-us/articles/360038113814",
  "wallet.transaction.received": "!!!{currency} received",
  "wallet.transaction.sent": "!!!{currency} sent",
  "wallet.transaction.state.confirmed": "!!!Transaction confirmed",
  "automaticUpdate.postpone.button.label": "Daedalusの次回起動時まで保留する",
  "automaticUpdate.title": "ソフトウェアが更新できます",
  "backToTopButton.label": "トップに戻る",
+
  "cancel.transaction.confirmation.dialog.button.backLabel": "いいえ、トランザクションを保留にしておきます",
+
  "cancel.transaction.confirmation.dialog.button.confirmLabel": "はい、トランザクションをキャンセルします",
+
  "cancel.transaction.confirmation.dialog.content1": "このトランザクションはしばらく前にCardanoネットワークに送信されましたが、完了していません。保留されている資金を解放するために、トランザクションのキャンセルを試してみることができます。ただしその後にトランザクションが完了する場合もあります。この場合、トランザクションは完了したトランザクションとしてウォレットに再び表示されます。",
+
  "cancel.transaction.confirmation.dialog.content2": "この資金の移動をできるだけ速やかに処理するために、このトランザクションをキャンセルして新しいトランザクションをネットワークに送信することをお勧めします。",
+
  "cancel.transaction.confirmation.dialog.headline": "トランザクションをキャンセルしますか",
  "cardano.node.sync.status.blocksSynced": "ブロック同期 {percentage}%",
  "daedalus.diagnostics.dialog.availableDiskSpace": "使用可能なディスク容量",
  "daedalus.diagnostics.dialog.blankScreenFix": "「ブランク画面修正」有効",
  "wallet.transaction.addresses.to": "送信先",
  "wallet.transaction.conversion.rate": "両替率",
  "wallet.transaction.noInputAddressesLabel": "アドレスなし",
-
  "wallet.transaction.pending.cancelPendingTxnNote": "このトランザクションは長時間保留中です。キャンセルすることをお勧めします。",
+
  "wallet.transaction.pending.cancelPendingTxnNote": "このトランザクションは長時間保留されています。このトランザクションに使用されている資金を解放するために、トランザクションのキャンセルを試みることができます。",
  "wallet.transaction.pending.cancelTransactionButton": "保留中のトランザクションをキャンセル",
-
  "wallet.transaction.pending.supportArticleLink": "理由を読む",
+
  "wallet.transaction.pending.supportArticleLink": "このトランザクションをキャンセルする理由",
+
  "wallet.transaction.pending.supportArticleUrl": "https://iohk.zendesk.com/hc/ja/articles/360038113814",
  "wallet.transaction.received": "{currency}受取済み",
  "wallet.transaction.sent": "{currency}送金済み",
  "wallet.transaction.state.confirmed": "トランザクション承認済み",
  "automaticUpdate.postpone.button.label": "!!!Postpone",
  "automaticUpdate.title": "!!!Software update is available",
  "backToTopButton.label": "!!!Back to top",
+
  "cancel.transaction.confirmation.dialog.button.backLabel": "!!!No, leave transaction pending",
+
  "cancel.transaction.confirmation.dialog.button.confirmLabel": "!!!Yes, cancel transaction",
+
  "cancel.transaction.confirmation.dialog.content1": "!!!This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.",
+
  "cancel.transaction.confirmation.dialog.content2": "!!!To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.",
+
  "cancel.transaction.confirmation.dialog.headline": "!!!Confirm transaction cancellation?",
  "cardano.node.sync.status.blocksSynced": "!!!Blocks synced {percentage}%",
  "daedalus.diagnostics.dialog.availableDiskSpace": "Available disk space",
  "daedalus.diagnostics.dialog.blankScreenFix": "'Blank Screen Fix' active",
  "wallet.transaction.pending.cancelPendingTxnNote": "!!!This transaction has been pending for too long. We recommend you cancel it.",
  "wallet.transaction.pending.cancelTransactionButton": "!!!Cancel pending transaction",
  "wallet.transaction.pending.supportArticleLink": "!!!Read why",
+
  "wallet.transaction.pending.supportArticleUrl": "!!!https://iohk.zendesk.com/hc/en-us/articles/360038113814",
  "wallet.transaction.received": "!!!{currency} received",
  "wallet.transaction.sent": "!!!{currency} sent",
  "wallet.transaction.state.confirmed": "!!!Transaction confirmed",
  "automaticUpdate.postpone.button.label": "!!!Postpone",
  "automaticUpdate.title": "!!!Software update is available",
  "backToTopButton.label": "!!!Back to top",
+
  "cancel.transaction.confirmation.dialog.button.backLabel": "!!!No, leave transaction pending",
+
  "cancel.transaction.confirmation.dialog.button.confirmLabel": "!!!Yes, cancel transaction",
+
  "cancel.transaction.confirmation.dialog.content1": "!!!This transaction was submitted to the Cardano network some time ago, but hasn’t been finalized yet. You can try to cancel the transaction now to release the pending funds, but there is a chance that the transaction will be finalized regardless. In this case, the transaction will reappear in your wallet as a completed transaction.",
+
  "cancel.transaction.confirmation.dialog.content2": "!!!To ensure that this transfer of funds is processed as soon as possible, we recommend that you cancel this transaction and submit a new one to the network.",
+
  "cancel.transaction.confirmation.dialog.headline": "!!!Confirm transaction cancellation?",
  "cardano.node.sync.status.blocksSynced": "!!!Blocks synced {percentage}%",
  "daedalus.diagnostics.dialog.availableDiskSpace": "!!!Available disk space",
  "daedalus.diagnostics.dialog.blankScreenFix": "!!!Blank Screen Fix",
  "wallet.transaction.pending.cancelPendingTxnNote": "!!!This transaction has been pending for too long. We recommend you cancel it.",
  "wallet.transaction.pending.cancelTransactionButton": "!!!Cancel pending transaction",
  "wallet.transaction.pending.supportArticleLink": "!!!Read why",
+
  "wallet.transaction.pending.supportArticleUrl": "!!!https://iohk.zendesk.com/hc/en-us/articles/360038113814",
  "wallet.transaction.received": "!!!{currency} received",
  "wallet.transaction.sent": "!!!{currency} sent",
  "wallet.transaction.state.confirmed": "!!!Transaction confirmed",