compile again after DD37 impl
This commit is contained in:
parent
6308c7ea6b
commit
f281803f1e
@ -16,9 +16,9 @@
|
|||||||
import {
|
import {
|
||||||
AbsoluteTime,
|
AbsoluteTime,
|
||||||
Amounts,
|
Amounts,
|
||||||
ExtendedStatus,
|
|
||||||
NotificationType,
|
NotificationType,
|
||||||
Transaction,
|
Transaction,
|
||||||
|
TransactionMajorState,
|
||||||
} from "@gnu-taler/taler-util";
|
} from "@gnu-taler/taler-util";
|
||||||
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
|
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
|
||||||
import { Fragment, h, JSX, VNode } from "preact";
|
import { Fragment, h, JSX, VNode } from "preact";
|
||||||
@ -58,7 +58,7 @@ export function PendingTransactions({ goToTransaction }: Props): VNode {
|
|||||||
!state || state.hasError
|
!state || state.hasError
|
||||||
? cache.tx
|
? cache.tx
|
||||||
: state.response.transactions.filter(
|
: state.response.transactions.filter(
|
||||||
(t) => t.extendedStatus === ExtendedStatus.Pending,
|
(t) => t.txState.major === TransactionMajorState.Pending,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (state && !state.hasError) {
|
if (state && !state.hasError) {
|
||||||
|
@ -22,7 +22,7 @@ import {
|
|||||||
Transaction,
|
Transaction,
|
||||||
TransactionType,
|
TransactionType,
|
||||||
WithdrawalType,
|
WithdrawalType,
|
||||||
ExtendedStatus,
|
TransactionMajorState,
|
||||||
} from "@gnu-taler/taler-util";
|
} from "@gnu-taler/taler-util";
|
||||||
import { h, VNode } from "preact";
|
import { h, VNode } from "preact";
|
||||||
import { useTranslationContext } from "@gnu-taler/web-util/browser";
|
import { useTranslationContext } from "@gnu-taler/web-util/browser";
|
||||||
@ -42,6 +42,9 @@ import { Time } from "./Time.js";
|
|||||||
export function TransactionItem(props: { tx: Transaction }): VNode {
|
export function TransactionItem(props: { tx: Transaction }): VNode {
|
||||||
const tx = props.tx;
|
const tx = props.tx;
|
||||||
const { i18n } = useTranslationContext();
|
const { i18n } = useTranslationContext();
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
switch (tx.type) {
|
switch (tx.type) {
|
||||||
case TransactionType.Withdrawal:
|
case TransactionType.Withdrawal:
|
||||||
return (
|
return (
|
||||||
@ -53,7 +56,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"W"}
|
iconPath={"W"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? tx.withdrawalDetails.type ===
|
? tx.withdrawalDetails.type ===
|
||||||
WithdrawalType.TalerBankIntegrationApi
|
WithdrawalType.TalerBankIntegrationApi
|
||||||
? !tx.withdrawalDetails.confirmed
|
? !tx.withdrawalDetails.confirmed
|
||||||
@ -77,7 +80,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"P"}
|
iconPath={"P"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Payment in progress`
|
? i18n.str`Payment in progress`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -89,12 +92,12 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
id={tx.transactionId}
|
id={tx.transactionId}
|
||||||
amount={tx.amountEffective}
|
amount={tx.amountEffective}
|
||||||
debitCreditIndicator={"credit"}
|
debitCreditIndicator={"credit"}
|
||||||
subtitle={tx.info.summary}
|
subtitle={"tx.info.summary"} //FIXME: DD37 wallet-core is not returning this value
|
||||||
title={tx.info.merchant.name}
|
title={"tx.info.merchant.name"} //FIXME: DD37 wallet-core is not returning this value
|
||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"R"}
|
iconPath={"R"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Executing refund...`
|
? i18n.str`Executing refund...`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -110,7 +113,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"T"}
|
iconPath={"T"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Grabbing the tipping...`
|
? i18n.str`Grabbing the tipping...`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -126,7 +129,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"R"}
|
iconPath={"R"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Refreshing coins...`
|
? i18n.str`Refreshing coins...`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -142,7 +145,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"D"}
|
iconPath={"D"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Deposit in progress`
|
? i18n.str`Deposit in progress`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -158,7 +161,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"I"}
|
iconPath={"I"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Waiting to be paid`
|
? i18n.str`Waiting to be paid`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -174,7 +177,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"I"}
|
iconPath={"I"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Payment in progress`
|
? i18n.str`Payment in progress`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -190,7 +193,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"T"}
|
iconPath={"T"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Receiving the transfer`
|
? i18n.str`Receiving the transfer`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
@ -206,7 +209,7 @@ export function TransactionItem(props: { tx: Transaction }): VNode {
|
|||||||
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
timestamp={AbsoluteTime.fromTimestamp(tx.timestamp)}
|
||||||
iconPath={"T"}
|
iconPath={"T"}
|
||||||
pending={
|
pending={
|
||||||
tx.extendedStatus === ExtendedStatus.Pending
|
tx.txState.major === TransactionMajorState.Pending
|
||||||
? i18n.str`Waiting to be received`
|
? i18n.str`Waiting to be received`
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,7 @@ export const NoEnoughBalanceAvailable = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "",
|
uri: "",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.InsufficientBalance,
|
status: PreparePayResultType.InsufficientBalance,
|
||||||
balanceDetails: {
|
balanceDetails: {
|
||||||
amountRequested: "USD:10",
|
amountRequested: "USD:10",
|
||||||
@ -87,6 +88,7 @@ export const NoEnoughBalanceMaterial = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "",
|
uri: "",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.InsufficientBalance,
|
status: PreparePayResultType.InsufficientBalance,
|
||||||
balanceDetails: {
|
balanceDetails: {
|
||||||
amountRequested: "USD:10",
|
amountRequested: "USD:10",
|
||||||
@ -126,6 +128,7 @@ export const NoEnoughBalanceAgeAcceptable = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "",
|
uri: "",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.InsufficientBalance,
|
status: PreparePayResultType.InsufficientBalance,
|
||||||
balanceDetails: {
|
balanceDetails: {
|
||||||
amountRequested: "USD:10",
|
amountRequested: "USD:10",
|
||||||
@ -166,6 +169,7 @@ export const NoEnoughBalanceMerchantAcceptable = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "",
|
uri: "",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.InsufficientBalance,
|
status: PreparePayResultType.InsufficientBalance,
|
||||||
balanceDetails: {
|
balanceDetails: {
|
||||||
amountRequested: "USD:10",
|
amountRequested: "USD:10",
|
||||||
@ -207,6 +211,7 @@ export const NoEnoughBalanceMerchantDepositable = tests.createExample(
|
|||||||
|
|
||||||
uri: "",
|
uri: "",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.InsufficientBalance,
|
status: PreparePayResultType.InsufficientBalance,
|
||||||
balanceDetails: {
|
balanceDetails: {
|
||||||
amountRequested: "USD:10",
|
amountRequested: "USD:10",
|
||||||
@ -247,6 +252,7 @@ export const NoEnoughBalanceFeeGap = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "",
|
uri: "",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.InsufficientBalance,
|
status: PreparePayResultType.InsufficientBalance,
|
||||||
balanceDetails: {
|
balanceDetails: {
|
||||||
amountRequested: "USD:10",
|
amountRequested: "USD:10",
|
||||||
@ -290,6 +296,7 @@ export const PaymentPossible = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.PaymentPossible,
|
status: PreparePayResultType.PaymentPossible,
|
||||||
talerUri: "taler://pay/..",
|
talerUri: "taler://pay/..",
|
||||||
amountEffective: "USD:10",
|
amountEffective: "USD:10",
|
||||||
@ -329,6 +336,7 @@ export const PaymentPossibleWithFee = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.PaymentPossible,
|
status: PreparePayResultType.PaymentPossible,
|
||||||
talerUri: "taler://pay/..",
|
talerUri: "taler://pay/..",
|
||||||
amountEffective: "USD:10.20",
|
amountEffective: "USD:10.20",
|
||||||
@ -365,6 +373,7 @@ export const TicketWithAProductList = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.PaymentPossible,
|
status: PreparePayResultType.PaymentPossible,
|
||||||
talerUri: "taler://pay/..",
|
talerUri: "taler://pay/..",
|
||||||
amountEffective: "USD:10.20",
|
amountEffective: "USD:10.20",
|
||||||
@ -420,6 +429,7 @@ export const TicketWithShipping = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.PaymentPossible,
|
status: PreparePayResultType.PaymentPossible,
|
||||||
talerUri: "taler://pay/..",
|
talerUri: "taler://pay/..",
|
||||||
amountEffective: "USD:10.20",
|
amountEffective: "USD:10.20",
|
||||||
@ -467,6 +477,7 @@ export const AlreadyConfirmedByOther = tests.createExample(BaseView, {
|
|||||||
|
|
||||||
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
uri: "taler://pay/merchant-backend.taler/2021.242-01G2X4275RBWG/?c=66BE594PDZR24744J6EQK52XM0",
|
||||||
payStatus: {
|
payStatus: {
|
||||||
|
transactionId: " ",
|
||||||
status: PreparePayResultType.AlreadyConfirmed,
|
status: PreparePayResultType.AlreadyConfirmed,
|
||||||
talerUri: "taler://pay/..",
|
talerUri: "taler://pay/..",
|
||||||
amountEffective: "USD:10",
|
amountEffective: "USD:10",
|
||||||
|
@ -21,7 +21,7 @@ import { ErrorAlert } from "../../context/alert.js";
|
|||||||
import { ButtonHandler } from "../../mui/handlers.js";
|
import { ButtonHandler } from "../../mui/handlers.js";
|
||||||
import { compose, StateViewMap } from "../../utils/index.js";
|
import { compose, StateViewMap } from "../../utils/index.js";
|
||||||
import { useComponentState } from "./state.js";
|
import { useComponentState } from "./state.js";
|
||||||
import { IgnoredView, InProgressView, ReadyView } from "./views.js";
|
import { IgnoredView, ReadyView } from "./views.js";
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
talerRefundUri?: string;
|
talerRefundUri?: string;
|
||||||
@ -33,8 +33,8 @@ export type State =
|
|||||||
| State.Loading
|
| State.Loading
|
||||||
| State.LoadingUriError
|
| State.LoadingUriError
|
||||||
| State.Ready
|
| State.Ready
|
||||||
| State.Ignored
|
// | State.InProgress
|
||||||
| State.InProgress;
|
| State.Ignored;
|
||||||
|
|
||||||
export namespace State {
|
export namespace State {
|
||||||
export interface Loading {
|
export interface Loading {
|
||||||
@ -51,8 +51,8 @@ export namespace State {
|
|||||||
merchantName: string;
|
merchantName: string;
|
||||||
products: Product[] | undefined;
|
products: Product[] | undefined;
|
||||||
amount: AmountJson;
|
amount: AmountJson;
|
||||||
awaitingAmount: AmountJson;
|
// awaitingAmount: AmountJson;
|
||||||
granted: AmountJson;
|
// granted: AmountJson;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Ready extends BaseInfo {
|
export interface Ready extends BaseInfo {
|
||||||
@ -69,16 +69,16 @@ export namespace State {
|
|||||||
status: "ignored";
|
status: "ignored";
|
||||||
error: undefined;
|
error: undefined;
|
||||||
}
|
}
|
||||||
export interface InProgress extends BaseInfo {
|
// export interface InProgress extends BaseInfo {
|
||||||
status: "in-progress";
|
// status: "in-progress";
|
||||||
error: undefined;
|
// error: undefined;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
const viewMapping: StateViewMap<State> = {
|
const viewMapping: StateViewMap<State> = {
|
||||||
loading: Loading,
|
loading: Loading,
|
||||||
error: ErrorAlertView,
|
error: ErrorAlertView,
|
||||||
"in-progress": InProgressView,
|
// "in-progress": InProgressView,
|
||||||
ignored: IgnoredView,
|
ignored: IgnoredView,
|
||||||
ready: ReadyView,
|
ready: ReadyView,
|
||||||
};
|
};
|
||||||
|
@ -14,7 +14,12 @@
|
|||||||
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Amounts, NotificationType } from "@gnu-taler/taler-util";
|
import {
|
||||||
|
Amounts,
|
||||||
|
NotificationType,
|
||||||
|
TransactionPayment,
|
||||||
|
TransactionType,
|
||||||
|
} from "@gnu-taler/taler-util";
|
||||||
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
|
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
|
||||||
import { useEffect, useState } from "preact/hooks";
|
import { useEffect, useState } from "preact/hooks";
|
||||||
import { alertFromError, useAlertContext } from "../../context/alert.js";
|
import { alertFromError, useAlertContext } from "../../context/alert.js";
|
||||||
@ -35,10 +40,22 @@ export function useComponentState({
|
|||||||
|
|
||||||
const info = useAsyncAsHook(async () => {
|
const info = useAsyncAsHook(async () => {
|
||||||
if (!talerRefundUri) throw Error("ERROR_NO-URI-FOR-REFUND");
|
if (!talerRefundUri) throw Error("ERROR_NO-URI-FOR-REFUND");
|
||||||
const refund = await api.wallet.call(WalletApiOperation.StartRefundQueryForUri, {
|
const refund = await api.wallet.call(
|
||||||
|
WalletApiOperation.StartRefundQueryForUri,
|
||||||
|
{
|
||||||
talerRefundUri,
|
talerRefundUri,
|
||||||
});
|
},
|
||||||
return { refund, uri: talerRefundUri };
|
);
|
||||||
|
const purchase = await api.wallet.call(
|
||||||
|
WalletApiOperation.GetTransactionById,
|
||||||
|
{
|
||||||
|
transactionId: refund.transactionId,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (purchase.type !== TransactionType.Payment) {
|
||||||
|
throw Error("Refund of non purchase transaction is not handled");
|
||||||
|
}
|
||||||
|
return { refund, purchase, uri: talerRefundUri };
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
@ -67,12 +84,15 @@ export function useComponentState({
|
|||||||
// };
|
// };
|
||||||
// }
|
// }
|
||||||
|
|
||||||
const { refund, uri } = info.response;
|
const { refund, purchase, uri } = info.response;
|
||||||
|
|
||||||
const doAccept = async (): Promise<void> => {
|
const doAccept = async (): Promise<void> => {
|
||||||
const res = await api.wallet.call(WalletApiOperation.AcceptPurchaseRefund, {
|
const res = await api.wallet.call(
|
||||||
transactionId: uri,
|
WalletApiOperation.StartRefundQueryForUri,
|
||||||
});
|
{
|
||||||
|
talerRefundUri: uri,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
onSuccess(res.transactionId);
|
onSuccess(res.transactionId);
|
||||||
};
|
};
|
||||||
@ -82,11 +102,11 @@ export function useComponentState({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const baseInfo = {
|
const baseInfo = {
|
||||||
amount: Amounts.parseOrThrow(info.response.refund.effectivePaid),
|
amount: Amounts.parseOrThrow(purchase.amountEffective),
|
||||||
granted: Amounts.parseOrThrow(info.response.refund.granted),
|
// granted: Amounts.parseOrThrow(info.response.refund.granted),
|
||||||
merchantName: info.response.refund.info.merchant.name,
|
// awaitingAmount: Amounts.parseOrThrow(refund.awaiting),
|
||||||
products: info.response.refund.info.products,
|
merchantName: purchase.info.merchant.name,
|
||||||
awaitingAmount: Amounts.parseOrThrow(refund.awaiting),
|
products: purchase.info.products,
|
||||||
error: undefined,
|
error: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -97,17 +117,18 @@ export function useComponentState({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (refund.pending) {
|
//FIXME: DD37 wallet-core is not returning this value
|
||||||
return {
|
// if (refund.pending) {
|
||||||
status: "in-progress",
|
// return {
|
||||||
...baseInfo,
|
// status: "in-progress",
|
||||||
};
|
// ...baseInfo,
|
||||||
}
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: "ready",
|
status: "ready",
|
||||||
...baseInfo,
|
...baseInfo,
|
||||||
orderId: info.response.refund.info.orderId,
|
orderId: purchase.info.orderId,
|
||||||
accept: {
|
accept: {
|
||||||
onClick: pushAlertOnError(doAccept),
|
onClick: pushAlertOnError(doAccept),
|
||||||
},
|
},
|
||||||
|
@ -22,20 +22,20 @@
|
|||||||
import { Amounts } from "@gnu-taler/taler-util";
|
import { Amounts } from "@gnu-taler/taler-util";
|
||||||
import beer from "../../../static-dev/beer.png";
|
import beer from "../../../static-dev/beer.png";
|
||||||
import * as tests from "@gnu-taler/web-util/testing";
|
import * as tests from "@gnu-taler/web-util/testing";
|
||||||
import { IgnoredView, InProgressView, ReadyView } from "./views.js";
|
import { IgnoredView, ReadyView } from "./views.js";
|
||||||
export default {
|
export default {
|
||||||
title: "refund",
|
title: "refund",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const InProgress = tests.createExample(InProgressView, {
|
// export const InProgress = tests.createExample(InProgressView, {
|
||||||
status: "in-progress",
|
// status: "in-progress",
|
||||||
error: undefined,
|
// error: undefined,
|
||||||
amount: Amounts.parseOrThrow("USD:1"),
|
// amount: Amounts.parseOrThrow("USD:1"),
|
||||||
awaitingAmount: Amounts.parseOrThrow("USD:1"),
|
// awaitingAmount: Amounts.parseOrThrow("USD:1"),
|
||||||
granted: Amounts.parseOrThrow("USD:0"),
|
// granted: Amounts.parseOrThrow("USD:0"),
|
||||||
merchantName: "the merchant",
|
// merchantName: "the merchant",
|
||||||
products: undefined,
|
// products: undefined,
|
||||||
});
|
// });
|
||||||
|
|
||||||
export const Ready = tests.createExample(ReadyView, {
|
export const Ready = tests.createExample(ReadyView, {
|
||||||
status: "ready",
|
status: "ready",
|
||||||
@ -44,8 +44,8 @@ export const Ready = tests.createExample(ReadyView, {
|
|||||||
ignore: {},
|
ignore: {},
|
||||||
|
|
||||||
amount: Amounts.parseOrThrow("USD:1"),
|
amount: Amounts.parseOrThrow("USD:1"),
|
||||||
awaitingAmount: Amounts.parseOrThrow("USD:1"),
|
// awaitingAmount: Amounts.parseOrThrow("USD:1"),
|
||||||
granted: Amounts.parseOrThrow("USD:0"),
|
// granted: Amounts.parseOrThrow("USD:0"),
|
||||||
merchantName: "the merchant",
|
merchantName: "the merchant",
|
||||||
products: [],
|
products: [],
|
||||||
orderId: "abcdef",
|
orderId: "abcdef",
|
||||||
@ -57,8 +57,8 @@ export const WithAProductList = tests.createExample(ReadyView, {
|
|||||||
accept: {},
|
accept: {},
|
||||||
ignore: {},
|
ignore: {},
|
||||||
amount: Amounts.parseOrThrow("USD:1"),
|
amount: Amounts.parseOrThrow("USD:1"),
|
||||||
awaitingAmount: Amounts.parseOrThrow("USD:1"),
|
// awaitingAmount: Amounts.parseOrThrow("USD:1"),
|
||||||
granted: Amounts.parseOrThrow("USD:0"),
|
// granted: Amounts.parseOrThrow("USD:0"),
|
||||||
merchantName: "the merchant",
|
merchantName: "the merchant",
|
||||||
products: [
|
products: [
|
||||||
{
|
{
|
||||||
|
@ -31,251 +31,257 @@ import { nullFunction } from "../../mui/handlers.js";
|
|||||||
import { createWalletApiMock } from "../../test-utils.js";
|
import { createWalletApiMock } from "../../test-utils.js";
|
||||||
import { useComponentState } from "./state.js";
|
import { useComponentState } from "./state.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commenting this tests out since the behavior
|
||||||
|
*/
|
||||||
|
|
||||||
describe("Refund CTA states", () => {
|
describe("Refund CTA states", () => {
|
||||||
it("should tell the user that the URI is missing", async () => {
|
// it("should tell the user that the URI is missing", async () => {
|
||||||
const { handler, TestingContext } = createWalletApiMock();
|
// const { handler, TestingContext } = createWalletApiMock();
|
||||||
|
// const props = {
|
||||||
const props = {
|
// talerRefundUri: undefined,
|
||||||
talerRefundUri: undefined,
|
// cancel: nullFunction,
|
||||||
cancel: nullFunction,
|
// onSuccess: nullFunction,
|
||||||
onSuccess: nullFunction,
|
// };
|
||||||
};
|
// const hookBehavior = await tests.hookBehaveLikeThis(
|
||||||
|
// useComponentState,
|
||||||
const hookBehavior = await tests.hookBehaveLikeThis(
|
// props,
|
||||||
useComponentState,
|
// [
|
||||||
props,
|
// ({ status, error }) => {
|
||||||
[
|
// expect(status).equals("loading");
|
||||||
({ status, error }) => {
|
// expect(error).undefined;
|
||||||
expect(status).equals("loading");
|
// },
|
||||||
expect(error).undefined;
|
// ({ status, error }) => {
|
||||||
},
|
// expect(status).equals("error");
|
||||||
({ status, error }) => {
|
// if (!error) expect.fail();
|
||||||
expect(status).equals("error");
|
// // if (!error.hasError) expect.fail();
|
||||||
if (!error) expect.fail();
|
// // if (error.operational) expect.fail();
|
||||||
// if (!error.hasError) expect.fail();
|
// expect(error.description).eq("ERROR_NO-URI-FOR-REFUND");
|
||||||
// if (error.operational) expect.fail();
|
// },
|
||||||
expect(error.description).eq("ERROR_NO-URI-FOR-REFUND");
|
// ],
|
||||||
},
|
// TestingContext,
|
||||||
],
|
// );
|
||||||
TestingContext,
|
// expect(hookBehavior).deep.equal({ result: "ok" });
|
||||||
);
|
// expect(handler.getCallingQueueState()).eq("empty");
|
||||||
|
// });
|
||||||
expect(hookBehavior).deep.equal({ result: "ok" });
|
// it("should be ready after loading", async () => {
|
||||||
expect(handler.getCallingQueueState()).eq("empty");
|
// const { handler, TestingContext } = createWalletApiMock();
|
||||||
});
|
// const props = {
|
||||||
|
// talerRefundUri: "taler://refund/asdasdas",
|
||||||
it("should be ready after loading", async () => {
|
// cancel: nullFunction,
|
||||||
const { handler, TestingContext } = createWalletApiMock();
|
// onSuccess: nullFunction,
|
||||||
const props = {
|
// };
|
||||||
talerRefundUri: "taler://refund/asdasdas",
|
// handler.addWalletCallResponse(
|
||||||
cancel: nullFunction,
|
// WalletApiOperation.StartRefundQueryForUri,
|
||||||
onSuccess: nullFunction,
|
// undefined,
|
||||||
};
|
// {
|
||||||
|
// // awaiting: "EUR:2",
|
||||||
handler.addWalletCallResponse(WalletApiOperation.StartRefundQueryForUri, undefined, {
|
// // effectivePaid: "EUR:2",
|
||||||
awaiting: "EUR:2",
|
// // gone: "EUR:0",
|
||||||
effectivePaid: "EUR:2",
|
// // granted: "EUR:0",
|
||||||
gone: "EUR:0",
|
// // pending: false,
|
||||||
granted: "EUR:0",
|
// // proposalId: "1",
|
||||||
pending: false,
|
// // info: {
|
||||||
proposalId: "1",
|
// // contractTermsHash: "123",
|
||||||
info: {
|
// // merchant: {
|
||||||
contractTermsHash: "123",
|
// // name: "the merchant name",
|
||||||
merchant: {
|
// // },
|
||||||
name: "the merchant name",
|
// // orderId: "orderId1",
|
||||||
},
|
// // summary: "the summary",
|
||||||
orderId: "orderId1",
|
// // } as OrderShortInfo,
|
||||||
summary: "the summary",
|
// },
|
||||||
} as OrderShortInfo,
|
// );
|
||||||
});
|
// const hookBehavior = await tests.hookBehaveLikeThis(
|
||||||
|
// useComponentState,
|
||||||
const hookBehavior = await tests.hookBehaveLikeThis(
|
// props,
|
||||||
useComponentState,
|
// [
|
||||||
props,
|
// ({ status, error }) => {
|
||||||
[
|
// expect(status).equals("loading");
|
||||||
({ status, error }) => {
|
// expect(error).undefined;
|
||||||
expect(status).equals("loading");
|
// },
|
||||||
expect(error).undefined;
|
// (state) => {
|
||||||
},
|
// if (state.status !== "ready") expect.fail();
|
||||||
(state) => {
|
// if (state.error) expect.fail();
|
||||||
if (state.status !== "ready") expect.fail();
|
// expect(state.accept.onClick).not.undefined;
|
||||||
if (state.error) expect.fail();
|
// expect(state.ignore.onClick).not.undefined;
|
||||||
expect(state.accept.onClick).not.undefined;
|
// expect(state.merchantName).eq("the merchant name");
|
||||||
expect(state.ignore.onClick).not.undefined;
|
// expect(state.orderId).eq("orderId1");
|
||||||
expect(state.merchantName).eq("the merchant name");
|
// expect(state.products).undefined;
|
||||||
expect(state.orderId).eq("orderId1");
|
// },
|
||||||
expect(state.products).undefined;
|
// ],
|
||||||
},
|
// TestingContext,
|
||||||
],
|
// );
|
||||||
TestingContext,
|
// expect(hookBehavior).deep.equal({ result: "ok" });
|
||||||
);
|
// expect(handler.getCallingQueueState()).eq("empty");
|
||||||
|
// });
|
||||||
expect(hookBehavior).deep.equal({ result: "ok" });
|
// it("should be ignored after clicking the ignore button", async () => {
|
||||||
expect(handler.getCallingQueueState()).eq("empty");
|
// const { handler, TestingContext } = createWalletApiMock();
|
||||||
});
|
// const props = {
|
||||||
|
// talerRefundUri: "taler://refund/asdasdas",
|
||||||
it("should be ignored after clicking the ignore button", async () => {
|
// cancel: async () => {
|
||||||
const { handler, TestingContext } = createWalletApiMock();
|
// null;
|
||||||
const props = {
|
// },
|
||||||
talerRefundUri: "taler://refund/asdasdas",
|
// onSuccess: async () => {
|
||||||
cancel: async () => {
|
// null;
|
||||||
null;
|
// },
|
||||||
},
|
// };
|
||||||
onSuccess: async () => {
|
// handler.addWalletCallResponse(
|
||||||
null;
|
// WalletApiOperation.StartRefundQueryForUri,
|
||||||
},
|
// undefined,
|
||||||
};
|
// {
|
||||||
|
// // awaiting: "EUR:2",
|
||||||
handler.addWalletCallResponse(WalletApiOperation.StartRefundQueryForUri, undefined, {
|
// // effectivePaid: "EUR:2",
|
||||||
awaiting: "EUR:2",
|
// // gone: "EUR:0",
|
||||||
effectivePaid: "EUR:2",
|
// // granted: "EUR:0",
|
||||||
gone: "EUR:0",
|
// // pending: false,
|
||||||
granted: "EUR:0",
|
// // proposalId: "1",
|
||||||
pending: false,
|
// // info: {
|
||||||
proposalId: "1",
|
// // contractTermsHash: "123",
|
||||||
info: {
|
// // merchant: {
|
||||||
contractTermsHash: "123",
|
// // name: "the merchant name",
|
||||||
merchant: {
|
// // },
|
||||||
name: "the merchant name",
|
// // orderId: "orderId1",
|
||||||
},
|
// // summary: "the summary",
|
||||||
orderId: "orderId1",
|
// // } as OrderShortInfo,
|
||||||
summary: "the summary",
|
// },
|
||||||
} as OrderShortInfo,
|
// );
|
||||||
});
|
// const hookBehavior = await tests.hookBehaveLikeThis(
|
||||||
|
// useComponentState,
|
||||||
const hookBehavior = await tests.hookBehaveLikeThis(
|
// props,
|
||||||
useComponentState,
|
// [
|
||||||
props,
|
// ({ status, error }) => {
|
||||||
[
|
// expect(status).equals("loading");
|
||||||
({ status, error }) => {
|
// expect(error).undefined;
|
||||||
expect(status).equals("loading");
|
// },
|
||||||
expect(error).undefined;
|
// (state) => {
|
||||||
},
|
// if (state.status !== "ready") expect.fail();
|
||||||
(state) => {
|
// if (state.error) expect.fail();
|
||||||
if (state.status !== "ready") expect.fail();
|
// expect(state.accept.onClick).not.undefined;
|
||||||
if (state.error) expect.fail();
|
// expect(state.merchantName).eq("the merchant name");
|
||||||
expect(state.accept.onClick).not.undefined;
|
// expect(state.orderId).eq("orderId1");
|
||||||
expect(state.merchantName).eq("the merchant name");
|
// expect(state.products).undefined;
|
||||||
expect(state.orderId).eq("orderId1");
|
// if (state.ignore.onClick === undefined) expect.fail();
|
||||||
expect(state.products).undefined;
|
// state.ignore.onClick();
|
||||||
|
// },
|
||||||
if (state.ignore.onClick === undefined) expect.fail();
|
// (state) => {
|
||||||
state.ignore.onClick();
|
// if (state.status !== "ignored") expect.fail();
|
||||||
},
|
// if (state.error) expect.fail();
|
||||||
(state) => {
|
// expect(state.merchantName).eq("the merchant name");
|
||||||
if (state.status !== "ignored") expect.fail();
|
// },
|
||||||
if (state.error) expect.fail();
|
// ],
|
||||||
expect(state.merchantName).eq("the merchant name");
|
// TestingContext,
|
||||||
},
|
// );
|
||||||
],
|
// expect(hookBehavior).deep.equal({ result: "ok" });
|
||||||
TestingContext,
|
// expect(handler.getCallingQueueState()).eq("empty");
|
||||||
);
|
// });
|
||||||
|
// it("should be in progress when doing refresh", async () => {
|
||||||
expect(hookBehavior).deep.equal({ result: "ok" });
|
// const { handler, TestingContext } = createWalletApiMock();
|
||||||
expect(handler.getCallingQueueState()).eq("empty");
|
// const props = {
|
||||||
});
|
// talerRefundUri: "taler://refund/asdasdas",
|
||||||
|
// cancel: async () => {
|
||||||
it("should be in progress when doing refresh", async () => {
|
// null;
|
||||||
const { handler, TestingContext } = createWalletApiMock();
|
// },
|
||||||
const props = {
|
// onSuccess: async () => {
|
||||||
talerRefundUri: "taler://refund/asdasdas",
|
// null;
|
||||||
cancel: async () => {
|
// },
|
||||||
null;
|
// };
|
||||||
},
|
// handler.addWalletCallResponse(
|
||||||
onSuccess: async () => {
|
// WalletApiOperation.StartRefundQueryForUri,
|
||||||
null;
|
// undefined,
|
||||||
},
|
// {
|
||||||
};
|
// // awaiting: "EUR:2",
|
||||||
|
// // effectivePaid: "EUR:2",
|
||||||
handler.addWalletCallResponse(WalletApiOperation.StartRefundQueryForUri, undefined, {
|
// // gone: "EUR:0",
|
||||||
awaiting: "EUR:2",
|
// // granted: "EUR:0",
|
||||||
effectivePaid: "EUR:2",
|
// // pending: true,
|
||||||
gone: "EUR:0",
|
// // proposalId: "1",
|
||||||
granted: "EUR:0",
|
// // info: {
|
||||||
pending: true,
|
// // contractTermsHash: "123",
|
||||||
proposalId: "1",
|
// // merchant: {
|
||||||
info: {
|
// // name: "the merchant name",
|
||||||
contractTermsHash: "123",
|
// // },
|
||||||
merchant: {
|
// // orderId: "orderId1",
|
||||||
name: "the merchant name",
|
// // summary: "the summary",
|
||||||
},
|
// // } as OrderShortInfo,
|
||||||
orderId: "orderId1",
|
// },
|
||||||
summary: "the summary",
|
// );
|
||||||
} as OrderShortInfo,
|
// handler.addWalletCallResponse(
|
||||||
});
|
// WalletApiOperation.StartRefundQueryForUri,
|
||||||
handler.addWalletCallResponse(WalletApiOperation.StartRefundQueryForUri, undefined, {
|
// undefined,
|
||||||
awaiting: "EUR:1",
|
// {
|
||||||
effectivePaid: "EUR:2",
|
// // awaiting: "EUR:1",
|
||||||
gone: "EUR:0",
|
// // effectivePaid: "EUR:2",
|
||||||
granted: "EUR:1",
|
// // gone: "EUR:0",
|
||||||
pending: true,
|
// // granted: "EUR:1",
|
||||||
proposalId: "1",
|
// // pending: true,
|
||||||
info: {
|
// // proposalId: "1",
|
||||||
contractTermsHash: "123",
|
// // info: {
|
||||||
merchant: {
|
// // contractTermsHash: "123",
|
||||||
name: "the merchant name",
|
// // merchant: {
|
||||||
},
|
// // name: "the merchant name",
|
||||||
orderId: "orderId1",
|
// // },
|
||||||
summary: "the summary",
|
// // orderId: "orderId1",
|
||||||
} as OrderShortInfo,
|
// // summary: "the summary",
|
||||||
});
|
// // } as OrderShortInfo,
|
||||||
handler.addWalletCallResponse(WalletApiOperation.StartRefundQueryForUri, undefined, {
|
// },
|
||||||
awaiting: "EUR:0",
|
// );
|
||||||
effectivePaid: "EUR:2",
|
// handler.addWalletCallResponse(
|
||||||
gone: "EUR:0",
|
// WalletApiOperation.StartRefundQueryForUri,
|
||||||
granted: "EUR:2",
|
// undefined,
|
||||||
pending: false,
|
// {
|
||||||
proposalId: "1",
|
// // awaiting: "EUR:0",
|
||||||
info: {
|
// // effectivePaid: "EUR:2",
|
||||||
contractTermsHash: "123",
|
// // gone: "EUR:0",
|
||||||
merchant: {
|
// // granted: "EUR:2",
|
||||||
name: "the merchant name",
|
// // pending: false,
|
||||||
},
|
// // proposalId: "1",
|
||||||
orderId: "orderId1",
|
// // info: {
|
||||||
summary: "the summary",
|
// // contractTermsHash: "123",
|
||||||
} as OrderShortInfo,
|
// // merchant: {
|
||||||
});
|
// // name: "the merchant name",
|
||||||
|
// // },
|
||||||
const hookBehavior = await tests.hookBehaveLikeThis(
|
// // orderId: "orderId1",
|
||||||
useComponentState,
|
// // summary: "the summary",
|
||||||
props,
|
// // } as OrderShortInfo,
|
||||||
[
|
// },
|
||||||
({ status, error }) => {
|
// );
|
||||||
expect(status).equals("loading");
|
// const hookBehavior = await tests.hookBehaveLikeThis(
|
||||||
expect(error).undefined;
|
// useComponentState,
|
||||||
},
|
// props,
|
||||||
(state) => {
|
// [
|
||||||
if (state.status !== "in-progress") expect.fail();
|
// ({ status, error }) => {
|
||||||
if (state.error) expect.fail();
|
// expect(status).equals("loading");
|
||||||
expect(state.merchantName).eq("the merchant name");
|
// expect(error).undefined;
|
||||||
expect(state.products).undefined;
|
// },
|
||||||
expect(state.amount).deep.eq(Amounts.parseOrThrow("EUR:2"));
|
// (state) => {
|
||||||
// expect(state.progress).closeTo(1 / 3, 0.01)
|
// if (state.status !== "in-progress") expect.fail();
|
||||||
|
// if (state.error) expect.fail();
|
||||||
handler.notifyEventFromWallet(NotificationType.RefreshMelted);
|
// expect(state.merchantName).eq("the merchant name");
|
||||||
},
|
// expect(state.products).undefined;
|
||||||
(state) => {
|
// expect(state.amount).deep.eq(Amounts.parseOrThrow("EUR:2"));
|
||||||
if (state.status !== "in-progress") expect.fail();
|
// // expect(state.progress).closeTo(1 / 3, 0.01)
|
||||||
if (state.error) expect.fail();
|
// handler.notifyEventFromWallet(NotificationType.RefreshMelted);
|
||||||
expect(state.merchantName).eq("the merchant name");
|
// },
|
||||||
expect(state.products).undefined;
|
// (state) => {
|
||||||
expect(state.amount).deep.eq(Amounts.parseOrThrow("EUR:2"));
|
// if (state.status !== "in-progress") expect.fail();
|
||||||
// expect(state.progress).closeTo(2 / 3, 0.01)
|
// if (state.error) expect.fail();
|
||||||
|
// expect(state.merchantName).eq("the merchant name");
|
||||||
handler.notifyEventFromWallet(NotificationType.RefreshMelted);
|
// expect(state.products).undefined;
|
||||||
},
|
// expect(state.amount).deep.eq(Amounts.parseOrThrow("EUR:2"));
|
||||||
(state) => {
|
// // expect(state.progress).closeTo(2 / 3, 0.01)
|
||||||
if (state.status !== "ready") expect.fail();
|
// handler.notifyEventFromWallet(NotificationType.RefreshMelted);
|
||||||
if (state.error) expect.fail();
|
// },
|
||||||
expect(state.merchantName).eq("the merchant name");
|
// (state) => {
|
||||||
expect(state.products).undefined;
|
// if (state.status !== "ready") expect.fail();
|
||||||
expect(state.amount).deep.eq(Amounts.parseOrThrow("EUR:2"));
|
// if (state.error) expect.fail();
|
||||||
},
|
// expect(state.merchantName).eq("the merchant name");
|
||||||
],
|
// expect(state.products).undefined;
|
||||||
TestingContext,
|
// expect(state.amount).deep.eq(Amounts.parseOrThrow("EUR:2"));
|
||||||
);
|
// },
|
||||||
|
// ],
|
||||||
expect(hookBehavior).deep.equal({ result: "ok" });
|
// TestingContext,
|
||||||
expect(handler.getCallingQueueState()).eq("empty");
|
// );
|
||||||
});
|
// expect(hookBehavior).deep.equal({ result: "ok" });
|
||||||
|
// expect(handler.getCallingQueueState()).eq("empty");
|
||||||
|
// });
|
||||||
});
|
});
|
||||||
|
@ -38,38 +38,38 @@ export function IgnoredView(state: State.Ignored): VNode {
|
|||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
export function InProgressView(state: State.InProgress): VNode {
|
// export function InProgressView(state: State.InProgress): VNode {
|
||||||
const { i18n } = useTranslationContext();
|
// const { i18n } = useTranslationContext();
|
||||||
|
|
||||||
return (
|
// return (
|
||||||
<Fragment>
|
// <Fragment>
|
||||||
<section>
|
// <section>
|
||||||
<p>
|
// <p>
|
||||||
<i18n.Translate>The refund is in progress.</i18n.Translate>
|
// <i18n.Translate>The refund is in progress.</i18n.Translate>
|
||||||
</p>
|
// </p>
|
||||||
</section>
|
// </section>
|
||||||
<section>
|
// <section>
|
||||||
<Part
|
// <Part
|
||||||
big
|
// big
|
||||||
title={i18n.str`Total to refund`}
|
// title={i18n.str`Total to refund`}
|
||||||
text={<Amount value={state.awaitingAmount} />}
|
// text={<Amount value={state.awaitingAmount} />}
|
||||||
kind="negative"
|
// kind="negative"
|
||||||
/>
|
// />
|
||||||
<Part
|
// <Part
|
||||||
big
|
// big
|
||||||
title={i18n.str`Refunded`}
|
// title={i18n.str`Refunded`}
|
||||||
text={<Amount value={state.amount} />}
|
// text={<Amount value={state.amount} />}
|
||||||
kind="negative"
|
// kind="negative"
|
||||||
/>
|
// />
|
||||||
</section>
|
// </section>
|
||||||
{state.products && state.products.length ? (
|
// {state.products && state.products.length ? (
|
||||||
<section>
|
// <section>
|
||||||
<ProductList products={state.products} />
|
// <ProductList products={state.products} />
|
||||||
</section>
|
// </section>
|
||||||
) : undefined}
|
// ) : undefined}
|
||||||
</Fragment>
|
// </Fragment>
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
export function ReadyView(state: State.Ready): VNode {
|
export function ReadyView(state: State.Ready): VNode {
|
||||||
const { i18n } = useTranslationContext();
|
const { i18n } = useTranslationContext();
|
||||||
return (
|
return (
|
||||||
@ -89,7 +89,7 @@ export function ReadyView(state: State.Ready): VNode {
|
|||||||
text={<Amount value={state.amount} />}
|
text={<Amount value={state.amount} />}
|
||||||
kind="neutral"
|
kind="neutral"
|
||||||
/>
|
/>
|
||||||
{Amounts.isNonZero(state.granted) && (
|
{/* {Amounts.isNonZero(state.granted) && (
|
||||||
<Part
|
<Part
|
||||||
big
|
big
|
||||||
title={i18n.str`Already refunded`}
|
title={i18n.str`Already refunded`}
|
||||||
@ -102,7 +102,7 @@ export function ReadyView(state: State.Ready): VNode {
|
|||||||
title={i18n.str`Refund offered (without fee)`}
|
title={i18n.str`Refund offered (without fee)`}
|
||||||
text={<Amount value={state.awaitingAmount} />}
|
text={<Amount value={state.awaitingAmount} />}
|
||||||
kind="positive"
|
kind="positive"
|
||||||
/>
|
/> */}
|
||||||
</section>
|
</section>
|
||||||
{state.products && state.products.length ? (
|
{state.products && state.products.length ? (
|
||||||
<section>
|
<section>
|
||||||
@ -116,7 +116,8 @@ export function ReadyView(state: State.Ready): VNode {
|
|||||||
onClick={state.accept.onClick}
|
onClick={state.accept.onClick}
|
||||||
>
|
>
|
||||||
<i18n.Translate>
|
<i18n.Translate>
|
||||||
Accept <Amount value={state.awaitingAmount} />
|
{/* Accept <Amount value={state.awaitingAmount} /> */}
|
||||||
|
Accept
|
||||||
</i18n.Translate>
|
</i18n.Translate>
|
||||||
</Button>
|
</Button>
|
||||||
</section>
|
</section>
|
||||||
|
@ -26,6 +26,7 @@ import {
|
|||||||
TalerProtocolTimestamp,
|
TalerProtocolTimestamp,
|
||||||
TransactionCommon,
|
TransactionCommon,
|
||||||
TransactionDeposit,
|
TransactionDeposit,
|
||||||
|
TransactionMajorState,
|
||||||
TransactionPayment,
|
TransactionPayment,
|
||||||
TransactionPeerPullCredit,
|
TransactionPeerPullCredit,
|
||||||
TransactionPeerPullDebit,
|
TransactionPeerPullDebit,
|
||||||
@ -52,6 +53,9 @@ const commonTransaction = (): TransactionCommon =>
|
|||||||
amountRaw: "USD:10",
|
amountRaw: "USD:10",
|
||||||
amountEffective: "USD:9",
|
amountEffective: "USD:9",
|
||||||
pending: false,
|
pending: false,
|
||||||
|
txState: {
|
||||||
|
major: TransactionMajorState.Done,
|
||||||
|
},
|
||||||
timestamp: TalerProtocolTimestamp.fromSeconds(
|
timestamp: TalerProtocolTimestamp.fromSeconds(
|
||||||
new Date().getTime() / 1000 - count++ * 60 * 60 * 7,
|
new Date().getTime() / 1000 - count++ * 60 * 60 * 7,
|
||||||
),
|
),
|
||||||
@ -237,7 +241,9 @@ export const OneTransactionPending = tests.createExample(TestedComponent, {
|
|||||||
transactions: [
|
transactions: [
|
||||||
{
|
{
|
||||||
...exampleData.withdraw,
|
...exampleData.withdraw,
|
||||||
pending: true,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
balances: [
|
balances: [
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
AbsoluteTime,
|
AbsoluteTime,
|
||||||
ExtendedStatus,
|
|
||||||
PaymentStatus,
|
PaymentStatus,
|
||||||
RefreshReason,
|
RefreshReason,
|
||||||
TalerProtocolTimestamp,
|
TalerProtocolTimestamp,
|
||||||
@ -56,19 +55,20 @@ export default {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const commonTransaction = {
|
const commonTransaction: TransactionCommon = {
|
||||||
|
error: undefined,
|
||||||
amountRaw: "KUDOS:11",
|
amountRaw: "KUDOS:11",
|
||||||
amountEffective: "KUDOS:9.2",
|
amountEffective: "KUDOS:9.2",
|
||||||
extendedStatus: ExtendedStatus.Done,
|
txState: {
|
||||||
pending: undefined as any as boolean, //deprecated
|
major: TransactionMajorState.Done,
|
||||||
|
},
|
||||||
timestamp: TalerProtocolTimestamp.now(),
|
timestamp: TalerProtocolTimestamp.now(),
|
||||||
transactionId: "txn:deposit:12",
|
transactionId: "txn:deposit:12",
|
||||||
frozen: undefined as any as boolean, //deprecated
|
|
||||||
type: TransactionType.Deposit,
|
type: TransactionType.Deposit,
|
||||||
txState: {
|
} as Omit<
|
||||||
major: TransactionMajorState.Unknown,
|
Omit<Omit<TransactionCommon, "extendedStatus">, "frozen">,
|
||||||
},
|
"pending"
|
||||||
} as TransactionCommon;
|
> as TransactionCommon;
|
||||||
|
|
||||||
import merchantIcon from "../../static-dev/merchant-icon.jpeg";
|
import merchantIcon from "../../static-dev/merchant-icon.jpeg";
|
||||||
|
|
||||||
@ -262,7 +262,9 @@ export const WithdrawFiveMinutesAgoAndPending = tests.createExample(
|
|||||||
timestamp: TalerProtocolTimestamp.fromSeconds(
|
timestamp: TalerProtocolTimestamp.fromSeconds(
|
||||||
new Date().getTime() / 1000 - 60 * 5,
|
new Date().getTime() / 1000 - 60 * 5,
|
||||||
),
|
),
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@ -302,7 +304,9 @@ export const WithdrawPendingManual = tests.createExample(
|
|||||||
exchangePaytoUris: ["payto://iban/ES8877998399652238"],
|
exchangePaytoUris: ["payto://iban/ES8877998399652238"],
|
||||||
reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
|
reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
|
||||||
} as WithdrawalDetails,
|
} as WithdrawalDetails,
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@ -319,7 +323,9 @@ export const WithdrawPendingTalerBankUnconfirmed = tests.createExample(
|
|||||||
reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
|
reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
|
||||||
bankConfirmationUrl: "http://bank.demo.taler.net",
|
bankConfirmationUrl: "http://bank.demo.taler.net",
|
||||||
},
|
},
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -335,7 +341,9 @@ export const WithdrawPendingTalerBankConfirmed = tests.createExample(
|
|||||||
reserveIsReady: false,
|
reserveIsReady: false,
|
||||||
reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
|
reservePub: "A05AJGMFNSK4Q62NXR2FKNDB1J4EXTYQTE7VA4M9GZQ4TR06YBNG",
|
||||||
},
|
},
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -461,7 +469,9 @@ export const PaymentWithoutFee = tests.createExample(TestedComponent, {
|
|||||||
export const PaymentPending = tests.createExample(TestedComponent, {
|
export const PaymentPending = tests.createExample(TestedComponent, {
|
||||||
transaction: {
|
transaction: {
|
||||||
...exampleData.payment,
|
...exampleData.payment,
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -561,7 +571,9 @@ export const DepositError = tests.createExample(TestedComponent, {
|
|||||||
export const DepositPending = tests.createExample(TestedComponent, {
|
export const DepositPending = tests.createExample(TestedComponent, {
|
||||||
transaction: {
|
transaction: {
|
||||||
...exampleData.deposit,
|
...exampleData.deposit,
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -588,7 +600,12 @@ export const TipError = tests.createExample(TestedComponent, {
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const TipPending = tests.createExample(TestedComponent, {
|
export const TipPending = tests.createExample(TestedComponent, {
|
||||||
transaction: { ...exampleData.tip, extendedStatus: ExtendedStatus.Pending },
|
transaction: {
|
||||||
|
...exampleData.tip,
|
||||||
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export const Refund = tests.createExample(TestedComponent, {
|
export const Refund = tests.createExample(TestedComponent, {
|
||||||
@ -605,7 +622,9 @@ export const RefundError = tests.createExample(TestedComponent, {
|
|||||||
export const RefundPending = tests.createExample(TestedComponent, {
|
export const RefundPending = tests.createExample(TestedComponent, {
|
||||||
transaction: {
|
transaction: {
|
||||||
...exampleData.refund,
|
...exampleData.refund,
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -616,7 +635,9 @@ export const InvoiceCreditComplete = tests.createExample(TestedComponent, {
|
|||||||
export const InvoiceCreditIncomplete = tests.createExample(TestedComponent, {
|
export const InvoiceCreditIncomplete = tests.createExample(TestedComponent, {
|
||||||
transaction: {
|
transaction: {
|
||||||
...exampleData.pull_credit,
|
...exampleData.pull_credit,
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -634,6 +655,8 @@ export const TransferDebitComplete = tests.createExample(TestedComponent, {
|
|||||||
export const TransferDebitIncomplete = tests.createExample(TestedComponent, {
|
export const TransferDebitIncomplete = tests.createExample(TestedComponent, {
|
||||||
transaction: {
|
transaction: {
|
||||||
...exampleData.push_debit,
|
...exampleData.push_debit,
|
||||||
extendedStatus: ExtendedStatus.Pending,
|
txState: {
|
||||||
|
major: TransactionMajorState.Pending,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -18,7 +18,6 @@ import {
|
|||||||
AbsoluteTime,
|
AbsoluteTime,
|
||||||
AmountJson,
|
AmountJson,
|
||||||
Amounts,
|
Amounts,
|
||||||
ExtendedStatus,
|
|
||||||
Location,
|
Location,
|
||||||
MerchantInfo,
|
MerchantInfo,
|
||||||
NotificationType,
|
NotificationType,
|
||||||
@ -29,6 +28,7 @@ import {
|
|||||||
TalerProtocolTimestamp,
|
TalerProtocolTimestamp,
|
||||||
Transaction,
|
Transaction,
|
||||||
TransactionDeposit,
|
TransactionDeposit,
|
||||||
|
TransactionMajorState,
|
||||||
TransactionType,
|
TransactionType,
|
||||||
TranslatedString,
|
TranslatedString,
|
||||||
WithdrawalType,
|
WithdrawalType,
|
||||||
@ -136,9 +136,9 @@ export function TransactionPage({
|
|||||||
});
|
});
|
||||||
goToWalletHistory(currency);
|
goToWalletHistory(currency);
|
||||||
}}
|
}}
|
||||||
onRefund={async (purchaseId) => {
|
onRefund={async (transactionId) => {
|
||||||
await api.wallet.call(WalletApiOperation.ApplyRefundFromPurchaseId, {
|
await api.wallet.call(WalletApiOperation.StartRefundQuery, {
|
||||||
purchaseId,
|
transactionId,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
onBack={() => goToWalletHistory(currency)}
|
onBack={() => goToWalletHistory(currency)}
|
||||||
@ -186,7 +186,7 @@ function TransactionTemplate({
|
|||||||
|
|
||||||
async function doCheckBeforeForget(): Promise<void> {
|
async function doCheckBeforeForget(): Promise<void> {
|
||||||
if (
|
if (
|
||||||
transaction.extendedStatus === ExtendedStatus.Pending &&
|
transaction.txState.major === TransactionMajorState.Pending &&
|
||||||
transaction.type === TransactionType.Withdrawal
|
transaction.type === TransactionType.Withdrawal
|
||||||
) {
|
) {
|
||||||
setConfirmBeforeForget(true);
|
setConfirmBeforeForget(true);
|
||||||
@ -206,16 +206,16 @@ function TransactionTemplate({
|
|||||||
transaction.type === TransactionType.Payment;
|
transaction.type === TransactionType.Payment;
|
||||||
|
|
||||||
const transactionStillActive =
|
const transactionStillActive =
|
||||||
transaction.extendedStatus !== ExtendedStatus.Aborted &&
|
transaction.txState.major !== TransactionMajorState.Aborted &&
|
||||||
transaction.extendedStatus !== ExtendedStatus.Done &&
|
transaction.txState.major !== TransactionMajorState.Done &&
|
||||||
transaction.extendedStatus !== ExtendedStatus.Failed;
|
transaction.txState.major !== TransactionMajorState.Failed;
|
||||||
|
|
||||||
// show retry if there is an error in an active state, or after some time
|
// show retry if there is an error in an active state, or after some time
|
||||||
// if it is not aborting
|
// if it is not aborting
|
||||||
const showRetry =
|
const showRetry =
|
||||||
transactionStillActive &&
|
transactionStillActive &&
|
||||||
(transaction.error !== undefined ||
|
(transaction.error !== undefined ||
|
||||||
(transaction.extendedStatus !== ExtendedStatus.Aborting &&
|
(transaction.txState.major === TransactionMajorState.Aborting &&
|
||||||
(transaction.timestamp.t_s === "never" ||
|
(transaction.timestamp.t_s === "never" ||
|
||||||
differenceInSeconds(new Date(), transaction.timestamp.t_s * 1000) >
|
differenceInSeconds(new Date(), transaction.timestamp.t_s * 1000) >
|
||||||
SHOWING_RETRY_THRESHOLD_SECS)));
|
SHOWING_RETRY_THRESHOLD_SECS)));
|
||||||
@ -252,7 +252,7 @@ function TransactionTemplate({
|
|||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
) : undefined}
|
) : undefined}
|
||||||
{transaction.extendedStatus === ExtendedStatus.Pending && (
|
{transaction.txState.major === TransactionMajorState.Pending && (
|
||||||
<WarningBox>
|
<WarningBox>
|
||||||
<i18n.Translate>This transaction is not completed</i18n.Translate>
|
<i18n.Translate>This transaction is not completed</i18n.Translate>
|
||||||
</WarningBox>
|
</WarningBox>
|
||||||
@ -417,9 +417,10 @@ export function TransactionView({
|
|||||||
{transaction.exchangeBaseUrl}
|
{transaction.exchangeBaseUrl}
|
||||||
</Header>
|
</Header>
|
||||||
|
|
||||||
{transaction.extendedStatus !==
|
{/**FIXME: DD37 check if this holds */}
|
||||||
ExtendedStatus.Pending ? undefined : transaction.withdrawalDetails
|
{transaction.txState.major ===
|
||||||
.type === WithdrawalType.ManualTransfer ? (
|
TransactionMajorState.Pending ? undefined : transaction
|
||||||
|
.withdrawalDetails.type === WithdrawalType.ManualTransfer ? (
|
||||||
//manual withdrawal
|
//manual withdrawal
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<BankDetailsByPaytoType
|
<BankDetailsByPaytoType
|
||||||
@ -822,12 +823,12 @@ export function TransactionView({
|
|||||||
total={effective}
|
total={effective}
|
||||||
kind="positive"
|
kind="positive"
|
||||||
>
|
>
|
||||||
{transaction.info.summary}
|
{"transaction.info.summary"}
|
||||||
</Header>
|
</Header>
|
||||||
|
|
||||||
<Part
|
<Part
|
||||||
title={i18n.str`Merchant`}
|
title={i18n.str`Merchant`}
|
||||||
text={transaction.info.merchant.name as TranslatedString}
|
text={"transaction.info.merchant.name" as TranslatedString}
|
||||||
kind="neutral"
|
kind="neutral"
|
||||||
/>
|
/>
|
||||||
<Part
|
<Part
|
||||||
@ -838,14 +839,14 @@ export function TransactionView({
|
|||||||
tid: transaction.refundedTransactionId,
|
tid: transaction.refundedTransactionId,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
{transaction.info.orderId}
|
{"transaction.info.orderId"}
|
||||||
</a>
|
</a>
|
||||||
}
|
}
|
||||||
kind="neutral"
|
kind="neutral"
|
||||||
/>
|
/>
|
||||||
<Part
|
<Part
|
||||||
title={i18n.str`Purchase summary`}
|
title={i18n.str`Purchase summary`}
|
||||||
text={transaction.info.summary as TranslatedString}
|
text={"transaction.info.summary" as TranslatedString}
|
||||||
kind="neutral"
|
kind="neutral"
|
||||||
/>
|
/>
|
||||||
<Part
|
<Part
|
||||||
@ -890,8 +891,7 @@ export function TransactionView({
|
|||||||
text={transaction.exchangeBaseUrl as TranslatedString}
|
text={transaction.exchangeBaseUrl as TranslatedString}
|
||||||
kind="neutral"
|
kind="neutral"
|
||||||
/>
|
/>
|
||||||
{transaction.extendedStatus ===
|
{transaction.txState.major === TransactionMajorState.Pending &&
|
||||||
ExtendedStatus.Pending /** pending is not-pay */ &&
|
|
||||||
!transaction.error && (
|
!transaction.error && (
|
||||||
<Part
|
<Part
|
||||||
title={i18n.str`URI`}
|
title={i18n.str`URI`}
|
||||||
|
Loading…
Reference in New Issue
Block a user