From b1c1da74b43abc3355a70dfc533ad5af8a5f47c9 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 14 Jan 2024 16:00:31 -0300 Subject: fix some wording --- .../demobank-ui/src/components/Cashouts/views.tsx | 8 +++---- .../src/components/Transactions/views.tsx | 6 ++--- .../demobank-ui/src/pages/AccountPage/views.tsx | 2 +- packages/demobank-ui/src/pages/LoginForm.tsx | 10 +++++--- .../demobank-ui/src/pages/OperationState/views.tsx | 3 +-- packages/demobank-ui/src/pages/PaymentOptions.tsx | 9 ++++---- .../src/pages/PaytoWireTransferForm.tsx | 11 ++++++--- .../demobank-ui/src/pages/ProfileNavigation.tsx | 2 +- packages/demobank-ui/src/pages/QrCodeSection.tsx | 2 +- .../demobank-ui/src/pages/RegistrationPage.tsx | 2 +- .../demobank-ui/src/pages/SolveChallengePage.tsx | 6 ++--- .../demobank-ui/src/pages/WalletWithdrawForm.tsx | 4 ++-- .../src/pages/WithdrawalConfirmationQuestion.tsx | 27 +++++++++++++++------- .../demobank-ui/src/pages/WithdrawalQRCode.tsx | 9 ++++---- .../demobank-ui/src/pages/admin/AccountForm.tsx | 19 ++++++++------- .../demobank-ui/src/pages/admin/AccountList.tsx | 4 ++-- packages/demobank-ui/src/pages/admin/AdminHome.tsx | 22 ++++++++---------- .../src/pages/business/CreateCashout.tsx | 12 +--------- .../src/pages/business/ShowCashoutDetails.tsx | 8 +++---- 19 files changed, 86 insertions(+), 80 deletions(-) (limited to 'packages/demobank-ui/src') diff --git a/packages/demobank-ui/src/components/Cashouts/views.tsx b/packages/demobank-ui/src/components/Cashouts/views.tsx index 1f1f02e4e..c3fdec796 100644 --- a/packages/demobank-ui/src/components/Cashouts/views.tsx +++ b/packages/demobank-ui/src/components/Cashouts/views.tsx @@ -43,7 +43,7 @@ export function FailedView({ error }: State.Failed) { } export function ReadyView({ cashouts, onSelected }: State.Ready): VNode { - const { i18n } = useTranslationContext(); + const { i18n, dateLocale } = useTranslationContext(); const resp = useConversionInfo(); if (!resp) { return @@ -55,7 +55,7 @@ export function ReadyView({ cashouts, onSelected }: State.Ready): VNode { const txByDate = cashouts.reduce((prev, cur) => { const d = cur.creation_time.t_s === "never" ? "" - : format(cur.creation_time.t_s * 1000, "dd/MM/yyyy") + : format(cur.creation_time.t_s * 1000, "dd/MM/yyyy", { locale: dateLocale }) if (!prev[d]) { prev[d] = [] } @@ -90,9 +90,9 @@ export function ReadyView({ cashouts, onSelected }: State.Ready): VNode { {txs.map(item => { - const creationTime = item.creation_time.t_s === "never" ? "" : format(item.creation_time.t_s * 1000, "HH:mm:ss") + const creationTime = item.creation_time.t_s === "never" ? "" : format(item.creation_time.t_s * 1000, "HH:mm:ss", { locale: dateLocale }) const confirmationTime = item.confirmation_time - ? item.confirmation_time.t_s === "never" ? i18n.str`never` : format(item.confirmation_time.t_s, "dd/MM/yyyy HH:mm:ss") + ? item.confirmation_time.t_s === "never" ? i18n.str`never` : format(item.confirmation_time.t_s, "dd/MM/yyyy HH:mm:ss", { locale: dateLocale }) : "-" return ( diff --git a/packages/demobank-ui/src/components/Transactions/views.tsx b/packages/demobank-ui/src/components/Transactions/views.tsx index 8a8a8f72e..f3ffcd157 100644 --- a/packages/demobank-ui/src/components/Transactions/views.tsx +++ b/packages/demobank-ui/src/components/Transactions/views.tsx @@ -23,13 +23,13 @@ import { State } from "./index.js"; export function ReadyView({ transactions, onNext, onPrev }: State.Ready): VNode { - const { i18n } = useTranslationContext(); + const { i18n, dateLocale } = useTranslationContext(); const { config } = useBankCoreApiContext(); if (!transactions.length) return
const txByDate = transactions.reduce((prev, cur) => { const d = cur.when.t_ms === "never" ? "" - : format(cur.when.t_ms, "dd/MM/yyyy") + : format(cur.when.t_ms, "dd/MM/yyyy", { locale: dateLocale }) if (!prev[d]) { prev[d] = [] } @@ -62,7 +62,7 @@ export function ReadyView({ transactions, onNext, onPrev }: State.Ready): VNode {txs.map(item => { - const time = item.when.t_ms === "never" ? "" : format(item.when.t_ms, "HH:mm:ss") + const time = item.when.t_ms === "never" ? "" : format(item.when.t_ms, "HH:mm:ss", { locale: dateLocale }) return (
{time}
diff --git a/packages/demobank-ui/src/pages/AccountPage/views.tsx b/packages/demobank-ui/src/pages/AccountPage/views.tsx index 59a6db7b9..7e40b93eb 100644 --- a/packages/demobank-ui/src/pages/AccountPage/views.tsx +++ b/packages/demobank-ui/src/pages/AccountPage/views.tsx @@ -71,7 +71,7 @@ function ShowPedingOperation(): VNode { })(bankState.currentChallenge.operation) return { updateBankState("currentChallenge", undefined); }}> - To complete or cancel the operation click here + You can complete or cancel the operation in this page } diff --git a/packages/demobank-ui/src/pages/LoginForm.tsx b/packages/demobank-ui/src/pages/LoginForm.tsx index 5eaad4bb0..627252682 100644 --- a/packages/demobank-ui/src/pages/LoginForm.tsx +++ b/packages/demobank-ui/src/pages/LoginForm.tsx @@ -37,8 +37,8 @@ export function LoginForm({ currentUser, fixedUser, onRegister }: { fixedUser?: const { i18n } = useTranslationContext(); const { api } = useBankCoreApiContext(); const [notification, notify, handleError] = useLocalNotification() - const {config} = useBankCoreApiContext(); - + const { config } = useBankCoreApiContext(); + const ref = useRef(null); useEffect(function focusInput() { ref.current?.focus(); @@ -123,6 +123,7 @@ export function LoginForm({ currentUser, fixedUser, onRegister }: { fixedUser?: enterkeyhint="next" placeholder="identification" autocomplete="username" + title={i18n.str`username of the account`} required onInput={(e): void => { setUsername(e.currentTarget.value); @@ -137,7 +138,9 @@ export function LoginForm({ currentUser, fixedUser, onRegister }: { fixedUser?:
- +
{ setPassword(e.currentTarget.value); diff --git a/packages/demobank-ui/src/pages/OperationState/views.tsx b/packages/demobank-ui/src/pages/OperationState/views.tsx index d0016a2f3..05d53bb05 100644 --- a/packages/demobank-ui/src/pages/OperationState/views.tsx +++ b/packages/demobank-ui/src/pages/OperationState/views.tsx @@ -93,10 +93,9 @@ export function NeedConfirmationView({ error, onAbort: doAbort, onConfirm: doCon description: resp.detail.hint as TranslatedString, debug: resp.detail, }) - // FIXME: remove exchange word case TalerErrorCode.BANK_CONFIRM_INCOMPLETE: return notify({ type: "error", - title: i18n.str`The withdraw operation cannot be confirmed because no exchange and reserve public key selection happened before`, + title: i18n.str`The withdrawal operation can't be confirmed before a wallet accepted the transaction.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }) diff --git a/packages/demobank-ui/src/pages/PaymentOptions.tsx b/packages/demobank-ui/src/pages/PaymentOptions.tsx index 06d293097..2a7374cab 100644 --- a/packages/demobank-ui/src/pages/PaymentOptions.tsx +++ b/packages/demobank-ui/src/pages/PaymentOptions.tsx @@ -41,7 +41,7 @@ export function PaymentOptions({ limit, goToConfirmOperation, onAuthorizationReq
- Send money to + Send money
@@ -49,12 +49,13 @@ export function PaymentOptions({ limit, goToConfirmOperation, onAuthorizationReq
@@ -360,7 +362,9 @@ export function PaytoWireTransferForm({ message={errorsWire?.amount} isDirty={trimmedAmountStr !== undefined} /> -

amount to transfer

+

+ amount to transfer +

: @@ -377,6 +381,7 @@ export function PaytoWireTransferForm({ class="block overflow-hidden w-44 sm:w-96 rounded-md border-0 py-1.5 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6" value={rawPaytoInput ?? ""} required + title={i18n.str`uniform resource identifier of the target account`} placeholder={i18n.str`payto://iban/[receiver-iban]?message=[subject]&amount=[${limit.currency}:X.Y]`} onInput={(e): void => { rawPaytoInputSetter(e.currentTarget.value); diff --git a/packages/demobank-ui/src/pages/ProfileNavigation.tsx b/packages/demobank-ui/src/pages/ProfileNavigation.tsx index 3596d0f11..bd9883b1b 100644 --- a/packages/demobank-ui/src/pages/ProfileNavigation.tsx +++ b/packages/demobank-ui/src/pages/ProfileNavigation.tsx @@ -62,7 +62,7 @@ export function ProfileNavigation({ current }: { current: "details" | "delete" | {config.allow_conversion && nonAdminUser ? - Cashouts + Cashouts : undefined} diff --git a/packages/demobank-ui/src/pages/QrCodeSection.tsx b/packages/demobank-ui/src/pages/QrCodeSection.tsx index 64ebf7e83..606337cb1 100644 --- a/packages/demobank-ui/src/pages/QrCodeSection.tsx +++ b/packages/demobank-ui/src/pages/QrCodeSection.tsx @@ -104,7 +104,7 @@ export function QrCodeSection({

You will see the details of the operation in your wallet including the fees (if applies). - If you still don't have one you can install it from here. + If you still don't have one you can install it following instructions in this page.

diff --git a/packages/demobank-ui/src/pages/RegistrationPage.tsx b/packages/demobank-ui/src/pages/RegistrationPage.tsx index e7ed8a2b8..005a0bc2c 100644 --- a/packages/demobank-ui/src/pages/RegistrationPage.tsx +++ b/packages/demobank-ui/src/pages/RegistrationPage.tsx @@ -436,7 +436,7 @@ function RegistrationForm({ onComplete, onCancel }: { onComplete: () => void, on doRandomRegistration() }} > - Create a random user + Create a random temporary user

} diff --git a/packages/demobank-ui/src/pages/SolveChallengePage.tsx b/packages/demobank-ui/src/pages/SolveChallengePage.tsx index 426866e40..3647f2b65 100644 --- a/packages/demobank-ui/src/pages/SolveChallengePage.tsx +++ b/packages/demobank-ui/src/pages/SolveChallengePage.tsx @@ -297,7 +297,7 @@ export function SolveChallengePage({ } function ChallengeDetails({ challenge, onStart }: { challenge: ChallengeInProgess, onStart: () => void }): VNode { - const { i18n } = useTranslationContext(); + const { i18n, dateLocale } = useTranslationContext(); const { config } = useBankCoreApiContext(); return
@@ -445,9 +445,9 @@ function ChallengeDetails({ challenge, onStart }: { challenge: ChallengeInProges } {challenge.sent.t_ms !== "never" &&
-
Sent at
+
Sent at
- {format(challenge.sent.t_ms, "dd/MM/yyyy HH:mm:ss")} + {format(challenge.sent.t_ms, "dd/MM/yyyy HH:mm:ss", { locale: dateLocale })}
} diff --git a/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx b/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx index c04e85e0c..70b83fa82 100644 --- a/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx +++ b/packages/demobank-ui/src/pages/WalletWithdrawForm.tsx @@ -66,7 +66,7 @@ function OldWithdrawalForm({ goToConfirmOperation, limit, onCancel, focus }: { return - To complete or cancel the operation click here + To complete or cancel the operation in this page } @@ -261,7 +261,7 @@ export function WalletWithdrawForm({ updateSettings("showInstallWallet", false); }}> - If you don't have one yet you can follow the instruction here + If you don't have one yet you can follow the instruction in this page } diff --git a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx index a2ddc725e..3d1239857 100644 --- a/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx +++ b/packages/demobank-ui/src/pages/WithdrawalConfirmationQuestion.tsx @@ -93,10 +93,9 @@ export function WithdrawalConfirmationQuestion({ description: resp.detail.hint as TranslatedString, debug: resp.detail, }); - // FIXME: remove exchange word case TalerErrorCode.BANK_CONFIRM_INCOMPLETE: return notify({ type: "error", - title: i18n.str`The withdraw operation cannot be confirmed because no exchange and reserve public key selection happened before`, + title: i18n.str`The withdrawal operation can't be confirmed before a wallet accepted the transaction.`, description: resp.detail.hint as TranslatedString, debug: resp.detail, }); @@ -200,12 +199,16 @@ export function WithdrawalConfirmationQuestion({ const name = p.params["receiver-name"] return
-
Exchange account
+
+ Taler Exchange operator's account +
{p.iban}
{name &&
-
Exchange name
+
+ Taler Exchange operator's name +
{p.params["receiver-name"]}
} @@ -216,12 +219,16 @@ export function WithdrawalConfirmationQuestion({ const name = p.params["receiver-name"] return
-
Exchange account
+
+ Taler Exchange operator's account +
{p.account}
{name &&
-
Exchange name
+
+ Taler Exchange operator's name +
{p.params["receiver-name"]}
} @@ -229,14 +236,18 @@ export function WithdrawalConfirmationQuestion({ } default: return
-
Exchange account
+
+ Taler Exchange operator's account +
{details.account.targetPath}
} })()}
-
Amount
+
+ Amount +
diff --git a/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx b/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx index c81c4ab8a..c9384e945 100644 --- a/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx +++ b/packages/demobank-ui/src/pages/WithdrawalQRCode.tsx @@ -73,9 +73,8 @@ export function WithdrawalQRCode({

{i18n.str`Operation aborted`}

- - The wire transfer to the GNU Taler Exchange bank's account was aborted, your balance + The wire transfer to the Taler Exchange operator's account was aborted, your balance was not affected.

@@ -147,7 +146,7 @@ export function WithdrawalQRCode({ if (!data.selected_reserve_pub) { return - The exchange is selected but no reserve public key found. + The wallet confirmation is partially confirmed. The Taler Exchange operator is selected but no withdrawal identification found. } @@ -155,8 +154,8 @@ export function WithdrawalQRCode({ if (!account) { return - The exchange is selected but the exchange payto URI is missing or invalid. + title={i18n.str`The operation is incomplete or some step in the withdrawal failed`}> + The Taler Exchange operator is selected but the Taler Exchange operator account is missing or invalid. } diff --git a/packages/demobank-ui/src/pages/admin/AccountForm.tsx b/packages/demobank-ui/src/pages/admin/AccountForm.tsx index 827b2a0f0..e08fee8bc 100644 --- a/packages/demobank-ui/src/pages/admin/AccountForm.tsx +++ b/packages/demobank-ui/src/pages/admin/AccountForm.tsx @@ -110,7 +110,7 @@ export function AccountForm({ ? undefined : !editableCashout ? undefined : !cashoutParsed - ? i18n.str`does not follow the pattern` : + ? i18n.str`it doesnt have the pattern of an IBAN number` : !cashoutParsed.isKnown || cashoutParsed.targetType !== "iban" ? i18n.str`only "IBAN" target are supported` : !IBAN_REGEX.test(cashoutParsed.iban) @@ -120,7 +120,7 @@ export function AccountForm({ ? undefined : !editableAccount ? undefined : !internalParsed - ? i18n.str`does not follow the pattern` : + ? i18n.str`it doesnt have the pattern of an IBAN number` : !internalParsed.isKnown || internalParsed.targetType !== "iban" ? i18n.str`only "IBAN" target are supported` : !IBAN_REGEX.test(internalParsed.iban) @@ -129,7 +129,7 @@ export function AccountForm({ email: !newForm.email ? undefined : !EMAIL_REGEX.test(newForm.email) - ? i18n.str`it should be an email` : + ? i18n.str`it doesnt have the pattern of an email` : undefined, phone: !newForm.phone ? undefined : @@ -400,7 +400,9 @@ export function AccountForm({ message={errors?.debit_threshold ? String(errors?.debit_threshold) : undefined} isDirty={form.debit_threshold !== undefined} /> -

how much is user able to transfer

+

+ how much is user able to transfer after zero balance +

{purpose !== "create" || !userIsAdmin ? undefined : @@ -437,7 +439,7 @@ export function AccountForm({ class="block text-sm font-medium leading-6 text-gray-900" for="channel" > - {i18n.str`Confirm the operation using`} + {i18n.str`Enable second factor authentication`}
@@ -457,7 +459,7 @@ export function AccountForm({ - Email + Using email {purpose !== "show" && !hasEmail && i18n.str`add a email in your profile to enable this option`} @@ -484,7 +486,7 @@ export function AccountForm({ - SMS + Using SMS {purpose !== "show" && !hasPhone && i18n.str`add a phone number in your profile to enable this option`} @@ -494,9 +496,6 @@ export function AccountForm({ } -
-                    {JSON.stringify(form, undefined, 2)}
-                  
diff --git a/packages/demobank-ui/src/pages/admin/AccountList.tsx b/packages/demobank-ui/src/pages/admin/AccountList.tsx index dd4586697..4ec25660b 100644 --- a/packages/demobank-ui/src/pages/admin/AccountList.tsx +++ b/packages/demobank-ui/src/pages/admin/AccountList.tsx @@ -115,7 +115,7 @@ export function AccountList({ onRemoveAccount, onShowAccountDetails, onUpdateAcc onUpdateAccountPassword(item.username) }} > - change password + change password
{noBalance ? @@ -124,7 +124,7 @@ export function AccountList({ onRemoveAccount, onShowAccountDetails, onUpdateAcc onRemoveAccount(item.username) }} > - remove + remove : undefined} diff --git a/packages/demobank-ui/src/pages/admin/AdminHome.tsx b/packages/demobank-ui/src/pages/admin/AdminHome.tsx index f5bce1396..3b06a7740 100644 --- a/packages/demobank-ui/src/pages/admin/AdminHome.tsx +++ b/packages/demobank-ui/src/pages/admin/AdminHome.tsx @@ -1,5 +1,5 @@ import { AmountString, Amounts, CurrencySpecification, TalerCorebankApi, TalerError, assertUnreachable } from "@gnu-taler/taler-util"; -import { useTranslationContext } from "@gnu-taler/web-util/browser"; +import { useLang, useTranslationContext } from "@gnu-taler/web-util/browser"; import { format, getDate, getHours, getMonth, getYear, setDate, setHours, setMonth, setYear, sub } from "date-fns"; import { Fragment, VNode, h } from "preact"; import { useState } from "preact/hooks"; @@ -11,7 +11,6 @@ import { RenderAmount } from "../PaytoWireTransferForm.js"; import { WireTransfer } from "../WireTransfer.js"; import { AccountList } from "./AccountList.js"; - /** * Query account information and show QR code if there is pending withdrawal */ @@ -40,15 +39,14 @@ export function AdminHome({ onCreateAccount, onAuthorizationRequired, onRemoveAc } -function getDateForTimeframe(which: number, timeframe: TalerCorebankApi.MonitorTimeframeParam): string { +function getDateForTimeframe(which: number, timeframe: TalerCorebankApi.MonitorTimeframeParam, locale: Locale): string { const time = Date.now() - switch (timeframe) { - case TalerCorebankApi.MonitorTimeframeParam.hour: return `${format(setHours(time, which), "HH")}hs`; - case TalerCorebankApi.MonitorTimeframeParam.day: return format(setDate(time, which), "EEEE"); - case TalerCorebankApi.MonitorTimeframeParam.month: return format(setMonth(time, which), "MMMM"); - case TalerCorebankApi.MonitorTimeframeParam.year: return format(setYear(time, which), "yyyy"); - case TalerCorebankApi.MonitorTimeframeParam.decade: return format(setYear(time, which), "yyyy"); + case TalerCorebankApi.MonitorTimeframeParam.hour: return `${format(setHours(time, which), "HH", { locale })}hs`; + case TalerCorebankApi.MonitorTimeframeParam.day: return format(setDate(time, which), "EEEE", { locale }); + case TalerCorebankApi.MonitorTimeframeParam.month: return format(setMonth(time, which), "MMMM", { locale }); + case TalerCorebankApi.MonitorTimeframeParam.year: return format(setYear(time, which), "yyyy", { locale }); + case TalerCorebankApi.MonitorTimeframeParam.decade: return format(setYear(time, which), "yyyy", { locale }); } assertUnreachable(timeframe) } @@ -81,7 +79,7 @@ export function getTimeframesForDate(time: Date, timeframe: TalerCorebankApi.Mon function Metrics(): VNode { - const { i18n } = useTranslationContext() + const { i18n, dateLocale } = useTranslationContext() const [metricType, setMetricType] = useState(TalerCorebankApi.MonitorTimeframeParam.hour); const { config } = useBankCoreApiContext(); const respInfo = useConversionInfo() @@ -132,7 +130,7 @@ function Metrics(): VNode {

- Trading volume on {getDateForTimeframe(params.current, metricType)} compared to {getDateForTimeframe(params.previous, metricType)} + Trading volume on {getDateForTimeframe(params.current, metricType, dateLocale)} compared to {getDateForTimeframe(params.previous, metricType, dateLocale)}

@@ -186,7 +184,7 @@ function Metrics(): VNode { - download stats as csv + download stats as CSV
diff --git a/packages/demobank-ui/src/pages/business/CreateCashout.tsx b/packages/demobank-ui/src/pages/business/CreateCashout.tsx index e3602bff1..14e151ae6 100644 --- a/packages/demobank-ui/src/pages/business/CreateCashout.tsx +++ b/packages/demobank-ui/src/pages/business/CreateCashout.tsx @@ -417,11 +417,6 @@ export function CreateCashout({
Balance left - {/* - Learn more about how shipping is calculated - - */}
@@ -431,11 +426,6 @@ export function CreateCashout({
Before fee - {/* - Learn more about how shipping is calculated - - */}
@@ -467,7 +457,7 @@ export function CreateCashout({ class="block text-sm font-medium leading-6 text-gray-900" for="channel" > - {i18n.str`Confirm the operation using`} + {i18n.str`Second fac`}
diff --git a/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx b/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx index 76876df5d..a55bf3ab6 100644 --- a/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx +++ b/packages/demobank-ui/src/pages/business/ShowCashoutDetails.tsx @@ -52,7 +52,7 @@ export function ShowCashoutDetails({ id, onCancel, }: Props): VNode { - const { i18n } = useTranslationContext(); + const { i18n, dateLocale } = useTranslationContext(); const { state } = useBackendState(); const creds = state.status !== "loggedIn" ? undefined : state const { api } = useBankCoreApiContext() @@ -230,7 +230,7 @@ export function ShowCashoutDetails({
Created
- {format(result.body.creation_time.t_s * 1000, "dd/MM/yyyy HH:mm:ss")} + {format(result.body.creation_time.t_s * 1000, "dd/MM/yyyy HH:mm:ss", { locale: dateLocale })}
: undefined} @@ -256,7 +256,7 @@ export function ShowCashoutDetails({
Confirmed
- {format(result.body.confirmation_time.t_s * 1000, "dd/MM/yyyy HH:mm:ss")} + {format(result.body.confirmation_time.t_s * 1000, "dd/MM/yyyy HH:mm:ss", { locale: dateLocale })}
: undefined} @@ -280,7 +280,7 @@ export function ShowCashoutDetails({ >
-- cgit v1.2.3