diff options
Diffstat (limited to 'packages/merchant-backoffice-ui/src/paths')
3 files changed, 114 insertions, 99 deletions
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx index d05375b6c..63ed01565 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx @@ -31,6 +31,7 @@ import { import { Input } from "../../../../components/form/Input.js"; import { InputPaytoForm } from "../../../../components/form/InputPaytoForm.js"; import { InputSelector } from "../../../../components/form/InputSelector.js"; +import { ImportingAccountModal } from "../../../../components/modal/index.js"; import { undefinedIfEmpty } from "../../../../utils/table.js"; import { safeConvertURL } from "../update/UpdatePage.js"; @@ -46,6 +47,7 @@ const accountAuthType = ["none", "basic"]; export function CreatePage({ onCreate, onBack }: Props): VNode { const { i18n } = useTranslationContext(); + const [importing, setImporting] = useState(false); const [state, setState] = useState<Partial<Entity>>({}); const facadeURL = safeConvertURL(state.credit_facade_url); const errors: FormErrors<Entity> = { @@ -115,9 +117,26 @@ export function CreatePage({ onCreate, onBack }: Props): VNode { credit_facade_url, }); }; - + // {"accountURI":"payto://x-taler-bank/bank-fir.taler.test:1180/sebasjm?receiver-name=Sebastian%20Javier","infoURL":"http://sebasjm:secret-token%3AM4XNDC6HMD0Z3N3S74G5W64H3PNM4XCYHE0CHQE7DG29GAH2NYMG@bank-fir.taler.test:1180/accounts/sebasjm/taler-revenue/"} return ( <div> + {importing && <ImportingAccountModal onCancel={()=> {setImporting(false)}} onConfirm={(ac) => { + state.payto_uri = ac.accountURI + const u = new URL(ac.infoURL) + u.password = "" + if (u.username || u.password) { + state.credit_facade_credentials = { + type: "basic", + password: u.password, + username: u.username, + } + state.repeatPassword = u.password + } + u.password = "" + u.username = "" + state.credit_facade_url = u.href; + setImporting(false) + }} />} <section class="section is-main-section"> <div class="columns"> <div class="column" /> @@ -171,6 +190,16 @@ export function CreatePage({ onCreate, onBack }: Props): VNode { </FormProvider> <div class="buttons is-right mt-5"> + <button + class="button is-info" + data-tooltip={i18n.str`Need to complete marked fields`} + onClick={() => { + setImporting(true) + }} + > + <i18n.Translate>Import from bank</i18n.Translate> + </button> + {onBack && ( <button class="button" onClick={onBack}> <i18n.Translate>Cancel</i18n.Translate> diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx index 9bab33f6f..fa86271c3 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx @@ -68,50 +68,45 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode { revenueAPI, request.credit_facade_credentials, ); + if (resp instanceof TalerError) { + setNotif({ + message: i18n.str`Could not create account`, + type: "ERROR", + description: i18n.str`The request to check the revenue API failed.`, + details: resp.errorDetail + }); + return; + } if (resp.type === "fail") { switch (resp.case) { - case TestRevenueErrorType.NO_CONFIG: { - setNotif({ - message: i18n.str`Could not create account`, - type: "ERROR", - description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`, - }); - return; - } - case TestRevenueErrorType.CLIENT_BAD_REQUEST: { + case HttpStatusCode.BadRequest: { setNotif({ message: i18n.str`Could not create account`, type: "ERROR", description: i18n.str`Server replied with "bad request".`, }); return; + } - case TestRevenueErrorType.UNAUTHORIZED: { + case HttpStatusCode.Unauthorized: { setNotif({ message: i18n.str`Could not create account`, type: "ERROR", description: i18n.str`Unauthorized, try with another credentials.`, }); return; + } - case TestRevenueErrorType.NOT_FOUND: { - setNotif({ - message: i18n.str`Could not create account`, - type: "ERROR", - description: i18n.str`Check facade URL, server replied with "not found".`, - }); - return; - } - case TestRevenueErrorType.GENERIC_ERROR: { + case HttpStatusCode.NotFound: { setNotif({ message: i18n.str`Could not create account`, type: "ERROR", - description: resp.detail.hint, + description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`, }); return; } default: { - assertUnreachable(resp.case); + assertUnreachable(resp); } } } @@ -146,7 +141,10 @@ export enum TestRevenueErrorType { export async function testRevenueAPI( revenueAPI: URL, creds: FacadeCredentials | undefined, -): Promise<OperationOk<void> | OperationFail<TestRevenueErrorType>> { +): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound> +| OperationFail<HttpStatusCode.Unauthorized> +| OperationFail<HttpStatusCode.BadRequest> +| TalerError> { const api = new TalerRevenueHttpClient( revenueAPI.href, new BrowserFetchHttpLib(), @@ -167,68 +165,61 @@ export async function testRevenueAPI( const config = await api.getConfig(auth); if (config.type === "fail") { - switch (config.case) { - case HttpStatusCode.Unauthorized: { - return { - type: "fail", - case: TestRevenueErrorType.UNAUTHORIZED, - detail: { - code: 1, - }, - }; - } - case HttpStatusCode.NotFound: { - return { - type: "fail", - case: TestRevenueErrorType.NO_CONFIG, - detail: { - code: 1, - }, - }; - } - } + return config; + // switch (config.case) { + // case HttpStatusCode.Unauthorized: { + // return { + // type: "fail", + // case: TestRevenueErrorType.UNAUTHORIZED, + // detail: config.detail, + // }; + // } + // case HttpStatusCode.NotFound: { + // return { + // type: "fail", + // case: TestRevenueErrorType.NO_CONFIG, + // detail: config.detail, + // }; + // } + // } } const history = await api.getHistory(auth); if (history.type === "fail") { - switch (history.case) { - case HttpStatusCode.BadRequest: { - return { - type: "fail", - case: TestRevenueErrorType.CLIENT_BAD_REQUEST, - detail: { - code: 1, - }, - }; - } - case HttpStatusCode.Unauthorized: { - return { - type: "fail", - case: TestRevenueErrorType.UNAUTHORIZED, - detail: { - code: 1, - }, - }; - } - case HttpStatusCode.NotFound: { - return { - type: "fail", - case: TestRevenueErrorType.NOT_FOUND, - detail: { - code: 1, - }, - }; - } - } + return history; + // switch (history.case) { + // case HttpStatusCode.BadRequest: { + // return { + // type: "fail", + // case: TestRevenueErrorType.CLIENT_BAD_REQUEST, + // detail: history.detail, + // }; + // } + // case HttpStatusCode.Unauthorized: { + // return { + // type: "fail", + // case: TestRevenueErrorType.UNAUTHORIZED, + // detail: history.detail, + // }; + // } + // case HttpStatusCode.NotFound: { + // return { + // type: "fail", + // case: TestRevenueErrorType.NOT_FOUND, + // detail: history.detail, + // }; + // } + // } } } catch (err) { if (err instanceof TalerError) { - return { - type: "fail", - case: TestRevenueErrorType.GENERIC_ERROR, - detail: err.errorDetail, - }; + return err; + // return { + // type: "fail", + // case: TestRevenueErrorType.GENERIC_ERROR, + // detail: err.errorDetail, + // }; } } diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx index 70942fd55..d1a0c9ba4 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/update/index.tsx @@ -33,7 +33,7 @@ import { useBankAccountDetails } from "../../../../hooks/bank.js"; import { Notification } from "../../../../utils/types.js"; import { LoginPage } from "../../../login/index.js"; import { NotFoundPageOrAdminCreate } from "../../../notfound/index.js"; -import { TestRevenueErrorType, testRevenueAPI } from "../create/index.js"; +import { testRevenueAPI } from "../create/index.js"; import { UpdatePage } from "./UpdatePage.js"; export type Entity = TalerMerchantApi.AccountPatchDetails & WithId; @@ -89,50 +89,45 @@ export default function UpdateValidator({ revenueAPI, request.credit_facade_credentials, ); + if (resp instanceof TalerError) { + setNotif({ + message: i18n.str`Could not create account`, + type: "ERROR", + description: i18n.str`The request to check the revenue API failed.`, + details: resp.errorDetail + }); + return; + } if (resp.type === "fail") { switch (resp.case) { - case TestRevenueErrorType.NO_CONFIG: { - setNotif({ - message: i18n.str`Could not create account`, - type: "ERROR", - description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`, - }); - return; - } - case TestRevenueErrorType.CLIENT_BAD_REQUEST: { + case HttpStatusCode.BadRequest: { setNotif({ message: i18n.str`Could not create account`, type: "ERROR", description: i18n.str`Server replied with "bad request".`, }); return; + } - case TestRevenueErrorType.UNAUTHORIZED: { + case HttpStatusCode.Unauthorized: { setNotif({ message: i18n.str`Could not create account`, type: "ERROR", description: i18n.str`Unauthorized, try with another credentials.`, }); return; + } - case TestRevenueErrorType.NOT_FOUND: { - setNotif({ - message: i18n.str`Could not create account`, - type: "ERROR", - description: i18n.str`Check facade URL, server replied with "not found".`, - }); - return; - } - case TestRevenueErrorType.GENERIC_ERROR: { + case HttpStatusCode.NotFound: { setNotif({ message: i18n.str`Could not create account`, type: "ERROR", - description: resp.detail.hint, + description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`, }); return; } default: { - assertUnreachable(resp.case) + assertUnreachable(resp); } } } |