diff options
author | Sebastian <sebasjm@gmail.com> | 2021-07-12 14:47:59 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2021-07-12 14:49:00 -0300 |
commit | 1527b6c5f01ed5c0ee1bd0c3163007c11f2d6bf0 (patch) | |
tree | 9f410788dd79d9f26bfb512d3b0236db6ea2214a | |
parent | 0cf52a2812dd0cfab9bfdf2dcd81fe4787f4dcb0 (diff) |
moved out function creation from render
-rw-r--r-- | packages/taler-wallet-webextension/src/components/ErrorMessage.tsx | 3 | ||||
-rw-r--r-- | packages/taler-wallet-webextension/src/popup/ProviderDetailPage.tsx | 121 |
2 files changed, 59 insertions, 65 deletions
diff --git a/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx b/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx index eaf015224..6bbdd26dc 100644 --- a/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx +++ b/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx @@ -1,8 +1,9 @@ +import { VNode } from "preact"; import { useState } from "preact/hooks"; import arrowDown from '../../static/img/chevron-down.svg'; import { ErrorBox } from "./styled"; -export function ErrorMessage({ title, description }: { title?: string; description?: string; }) { +export function ErrorMessage({ title, description }: { title?: string|VNode; description?: string; }) { const [showErrorDetail, setShowErrorDetail] = useState(false); if (!title) return null; diff --git a/packages/taler-wallet-webextension/src/popup/ProviderDetailPage.tsx b/packages/taler-wallet-webextension/src/popup/ProviderDetailPage.tsx index 2482dee18..12567c2c7 100644 --- a/packages/taler-wallet-webextension/src/popup/ProviderDetailPage.tsx +++ b/packages/taler-wallet-webextension/src/popup/ProviderDetailPage.tsx @@ -54,69 +54,6 @@ export interface ViewProps { } export function ProviderView({ info, onDelete, onSync, onBack, onExtend }: ViewProps): VNode { - function Error() { - if (info?.lastError) { - return <ErrorMessage title={info.lastError.hint} /> - // <div class="errorbox" style={{ marginTop: 10 }} > - // <div style={{ height: 0, textAlign: 'right', color: 'gray', fontSize: 'small' }}>last time tried {!info.lastAttemptedBackupTimestamp || info.lastAttemptedBackupTimestamp.t_ms === 'never' ? 'never' : format(new Date(info.lastAttemptedBackupTimestamp.t_ms), 'dd/MM/yyyy HH:mm:ss')}</div> - // <p>{info.lastError.hint}</p> - // </div> - // </Fragment> - } - if (info?.backupProblem) { - switch (info.backupProblem.type) { - case "backup-conflicting-device": - return <div class="errorbox" style={{ marginTop: 10 }}> - <p>There is conflict with another backup from <b>{info.backupProblem.otherDeviceId}</b></p> - </div> - case "backup-unreadable": - return <div class="errorbox" style={{ marginTop: 10 }}> - <p>Backup is not readable</p> - </div> - default: - return <div class="errorbox" style={{ marginTop: 10 }}> - <p>Unknown backup problem: {JSON.stringify(info.backupProblem)}</p> - </div> - } - } - return null - } - - function colorByStatus(status: ProviderPaymentType) { - switch (status) { - case ProviderPaymentType.InsufficientBalance: - return 'rgb(223, 117, 20)' - case ProviderPaymentType.Unpaid: - return 'rgb(202, 60, 60)' - case ProviderPaymentType.Paid: - return 'rgb(28, 184, 65)' - case ProviderPaymentType.Pending: - return 'gray' - case ProviderPaymentType.InsufficientBalance: - return 'rgb(202, 60, 60)' - case ProviderPaymentType.TermsChanged: - return 'rgb(202, 60, 60)' - } - } - - function descriptionByStatus(status: ProviderPaymentStatus) { - switch (status.type) { - case ProviderPaymentType.InsufficientBalance: - return 'no enough balance to make the payment' - case ProviderPaymentType.Unpaid: - return 'not pay yet' - case ProviderPaymentType.Paid: - case ProviderPaymentType.TermsChanged: - if (status.paidUntil.t_ms === 'never') { - return 'service paid.' - } else { - return `service paid until ${format(status.paidUntil.t_ms, 'yyyy/MM/dd HH:mm:ss')}` - } - case ProviderPaymentType.Pending: - return '' - } - } - return ( <PopupBox> <header> @@ -125,7 +62,7 @@ export function ProviderView({ info, onDelete, onSync, onBack, onExtend }: ViewP {info.terms && <div>{info.terms.annualFee} / year</div>} </header> <section> - <Error /> + <Error info={info} /> <h3>{info.syncProviderBaseUrl}</h3> <p>{daysSince(info?.lastSuccessfulBackupTimestamp)} </p> <p>{descriptionByStatus(info.paymentStatus)}</p> @@ -193,3 +130,59 @@ function daysSince(d?: Timestamp) { }) return `synced ${str} ago` } + +function Error({ info }: { info: ProviderInfo }) { + if (info.lastError) { + return <ErrorMessage title={info.lastError.hint} /> + } + if (info.backupProblem) { + switch (info.backupProblem.type) { + case "backup-conflicting-device": + return <ErrorMessage title={<Fragment> + There is conflict with another backup from <b>{info.backupProblem.otherDeviceId}</b> + </Fragment>} /> + case "backup-unreadable": + return <ErrorMessage title="Backup is not readable" /> + default: + return <ErrorMessage title={<Fragment> + Unknown backup problem: {JSON.stringify(info.backupProblem)} + </Fragment>} /> + } + } + return null +} + +function colorByStatus(status: ProviderPaymentType) { + switch (status) { + case ProviderPaymentType.InsufficientBalance: + return 'rgb(223, 117, 20)' + case ProviderPaymentType.Unpaid: + return 'rgb(202, 60, 60)' + case ProviderPaymentType.Paid: + return 'rgb(28, 184, 65)' + case ProviderPaymentType.Pending: + return 'gray' + case ProviderPaymentType.InsufficientBalance: + return 'rgb(202, 60, 60)' + case ProviderPaymentType.TermsChanged: + return 'rgb(202, 60, 60)' + } +} + +function descriptionByStatus(status: ProviderPaymentStatus) { + switch (status.type) { + case ProviderPaymentType.InsufficientBalance: + return 'no enough balance to make the payment' + case ProviderPaymentType.Unpaid: + return 'not pay yet' + case ProviderPaymentType.Paid: + case ProviderPaymentType.TermsChanged: + if (status.paidUntil.t_ms === 'never') { + return 'service paid.' + } else { + return `service paid until ${format(status.paidUntil.t_ms, 'yyyy/MM/dd HH:mm:ss')}` + } + case ProviderPaymentType.Pending: + return '' + } +} |