import { classifyTalerUri, TalerUriType } from "@gnu-taler/taler-util"; import { ButtonPrimary, ButtonSuccess, PopupBox } from "../components/styled/index"; export interface Props { url: string; onDismiss: (s: boolean) => void; } export function TalerActionFound({ url, onDismiss }: Props) { const uriType = classifyTalerUri(url); return

Taler Action

{uriType === TalerUriType.TalerPay &&

This page has pay action.

{ chrome.tabs.create({ "url": actionForTalerUri(uriType, url) }); }}> Open pay page
} {uriType === TalerUriType.TalerWithdraw &&

This page has a withdrawal action.

{ chrome.tabs.create({ "url": actionForTalerUri(uriType, url) }); }}> Open withdraw page
} {uriType === TalerUriType.TalerTip &&

This page has a tip action.

{ chrome.tabs.create({ "url": actionForTalerUri(uriType, url) }); }}> Open tip page
} {uriType === TalerUriType.TalerNotifyReserve &&

This page has a notify reserve action.

{ chrome.tabs.create({ "url": actionForTalerUri(uriType, url) }); }}> Notify
} {uriType === TalerUriType.TalerRefund &&

This page has a refund action.

{ chrome.tabs.create({ "url": actionForTalerUri(uriType, url) }); }}> Open refund page
} {uriType === TalerUriType.Unknown &&

This page has a malformed taler uri.

{url}

}
; } function actionForTalerUri(uriType: TalerUriType, talerUri: string): string | undefined { switch (uriType) { case TalerUriType.TalerWithdraw: return makeExtensionUrlWithParams("static/wallet.html#/withdraw", { talerWithdrawUri: talerUri, }); case TalerUriType.TalerPay: return makeExtensionUrlWithParams("static/wallet.html#/pay", { talerPayUri: talerUri, }); case TalerUriType.TalerTip: return makeExtensionUrlWithParams("static/wallet.html#/tip", { talerTipUri: talerUri, }); case TalerUriType.TalerRefund: return makeExtensionUrlWithParams("static/wallet.html#/refund", { talerRefundUri: talerUri, }); case TalerUriType.TalerNotifyReserve: // FIXME: implement break; default: console.warn( "Response with HTTP 402 has Taler header, but header value is not a taler:// URI.", ); break; } return undefined; } function makeExtensionUrlWithParams( url: string, params?: { [name: string]: string | undefined }, ): string { const innerUrl = new URL(chrome.extension.getURL("/" + url)); if (params) { const hParams = Object.keys(params).map(k => `${k}=${params[k]}`).join('&') innerUrl.hash = innerUrl.hash + '?' + hParams } return innerUrl.href; }