diff options
author | Sebastian <sebasjm@gmail.com> | 2023-11-21 00:40:04 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-11-21 00:40:04 -0300 |
commit | 79e93451394c66f7f08d25fc578c59cffb807bd0 (patch) | |
tree | 8d5c5fb4e85b1ac2c679f21d008ded20e26e549e /packages/merchant-backoffice-ui/src/paths | |
parent | 0f7a3337a4259c1c28e35c2ff116942f533f5189 (diff) | |
download | wallet-core-79e93451394c66f7f08d25fc578c59cffb807bd0.tar.xz |
sane default for pay deadline and wire transfer and webhook docs
Diffstat (limited to 'packages/merchant-backoffice-ui/src/paths')
-rw-r--r-- | packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx | 74 | ||||
-rw-r--r-- | packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx | 46 |
2 files changed, 91 insertions, 29 deletions
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx index ea2cf849a..52ee9d351 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/orders/create/CreatePage.tsx @@ -143,7 +143,7 @@ export function CreatePage({ const instance_default = with_defaults(instanceConfig, config.currency) const [value, valueHandler] = useState(instance_default); const zero = Amounts.zeroOfCurrency(config.currency); - const [settings] = useSettings() + const [settings, updateSettings] = useSettings() const inventoryList = Object.values(value.inventoryProducts || {}); const productList = Object.values(value.products || {}); @@ -184,7 +184,7 @@ export function CreatePage({ ? i18n.str`wire transfer deadline cannot be before refund deadline` : undefined, pay_deadline: !value.payments?.pay_deadline - ? undefined + ? i18n.str`required` : !isFuture(value.payments.pay_deadline) ? i18n.str`should be in the future` : value.payments.wire_transfer_deadline && @@ -194,6 +194,11 @@ export function CreatePage({ ) ? i18n.str`wire transfer deadline cannot be before pay deadline` : undefined, + wire_transfer_deadline: !value.payments?.wire_transfer_deadline + ? i18n.str`required` + : !isFuture(value.payments.wire_transfer_deadline) + ? i18n.str`should be in the future` + : undefined, auto_refund_deadline: !value.payments?.auto_refund_deadline ? undefined : !isFuture(value.payments.auto_refund_deadline) @@ -354,9 +359,39 @@ export function CreatePage({ !prev.minimum_age || cur > prev.minimum_age ? cur : prev.minimum_age, 0, ); + + const noDefault_payDeadline = !instance_default.payments || !instance_default.payments.pay_deadline + const noDefault_wireDeadline = !instance_default.payments || !instance_default.payments.wire_transfer_deadline + const requiresSomeTalerOptions = noDefault_payDeadline || noDefault_wireDeadline + return ( <div> + <section class="section is-main-section"> + <div class="tabs is-toggle is-fullwidth is-small"> + <ul> + <li class={!settings.advanceOrderMode ? "is-active" : ""} onClick={() => { + updateSettings({ + ...settings, + advanceOrderMode: false + }) + }}> + <a > + <span><i18n.Translate>Simple</i18n.Translate></span> + </a> + </li> + <li class={settings.advanceOrderMode ? "is-active" : ""} onClick={() => { + updateSettings({ + ...settings, + advanceOrderMode: true + }) + }}> + <a > + <span><i18n.Translate>Advanced</i18n.Translate></span> + </a> + </li> + </ul> + </div> <div class="columns"> <div class="column" /> <div class="column is-four-fifths"> @@ -481,33 +516,34 @@ export function CreatePage({ </InputGroup> } - {settings.advanceOrderMode && + {(settings.advanceOrderMode || requiresSomeTalerOptions) && <InputGroup name="payments" label={i18n.str`Taler payment options`} tooltip={i18n.str`Override default Taler payment settings for this order`} > - <InputDate + {(settings.advanceOrderMode || noDefault_payDeadline) && <InputDate name="payments.pay_deadline" label={i18n.str`Payment deadline`} tooltip={i18n.str`Deadline for the customer to pay for the offer before it expires. Inventory products will be reserved until this deadline.`} side={ <span> <button class="button" onClick={() => { - valueHandler({ + const c = { ...value, payments: { ...(value.payments ?? {}), pay_deadline: instance_default.payments?.pay_deadline } - }) + } + valueHandler(c) }}> <i18n.Translate>default</i18n.Translate> </button> </span> } - /> - <InputDate + />} + {settings.advanceOrderMode && <InputDate name="payments.refund_deadline" label={i18n.str`Refund deadline`} tooltip={i18n.str`Time until which the order can be refunded by the merchant.`} @@ -526,8 +562,8 @@ export function CreatePage({ </button> </span> } - /> - <InputDate + />} + {(settings.advanceOrderMode || noDefault_wireDeadline) && <InputDate name="payments.wire_transfer_deadline" label={i18n.str`Wire transfer deadline`} tooltip={i18n.str`Deadline for the exchange to make the wire transfer.`} @@ -546,24 +582,24 @@ export function CreatePage({ </button> </span> } - /> - <InputDate + />} + {settings.advanceOrderMode && <InputDate name="payments.auto_refund_deadline" label={i18n.str`Auto-refund deadline`} tooltip={i18n.str`Time until which the wallet will automatically check for refunds without user interaction.`} - /> + />} - <InputCurrency + {settings.advanceOrderMode && <InputCurrency name="payments.max_fee" label={i18n.str`Maximum fee`} tooltip={i18n.str`Maximum fees the merchant is willing to cover for this order. Higher deposit fees must be covered in full by the consumer.`} - /> - <InputToggle + />} + {settings.advanceOrderMode && <InputToggle name="payments.createToken" label={i18n.str`Create token`} tooltip={i18n.str`If the order ID is easy to guess the token will prevent user to steal orders from others.`} - /> - <InputNumber + />} + {settings.advanceOrderMode && <InputNumber name="payments.minimum_age" label={i18n.str`Minimum age required`} tooltip={i18n.str`Any value greater than 0 will limit the coins able be used to pay this contract. If empty the age restriction will be defined by the products`} @@ -572,7 +608,7 @@ export function CreatePage({ ? i18n.str`Min age defined by the producs is ${minAgeByProducts}` : i18n.str`No product with age restriction in this order` } - /> + />} </InputGroup> } diff --git a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx index 7b07e689e..434d69412 100644 --- a/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx +++ b/packages/merchant-backoffice-ui/src/paths/instance/webhooks/create/CreatePage.tsx @@ -20,7 +20,7 @@ */ import { useTranslationContext } from "@gnu-taler/web-util/browser"; -import { h, VNode } from "preact"; +import { Fragment, h, VNode } from "preact"; import { useState } from "preact/hooks"; import { AsyncButton } from "../../../../components/exception/AsyncButton.js"; import { @@ -51,14 +51,14 @@ export function CreatePage({ onCreate, onBack }: Props): VNode { const errors: FormErrors<Entity> = { webhook_id: !state.webhook_id ? i18n.str`required` : undefined, - event_type: !state.event_type ? i18n.str`required` - : state.event_type !== "pay" && state.event_type !== "refund" ? i18n.str`it should be "pay" or "refund"` - : undefined, + event_type: !state.event_type ? i18n.str`required` + : state.event_type !== "pay" && state.event_type !== "refund" ? i18n.str`it should be "pay" or "refund"` + : undefined, http_method: !state.http_method ? i18n.str`required` : !validMethod.includes(state.http_method) - ? i18n.str`should be one of '${validMethod.join(", ")}'` - : undefined, + ? i18n.str`should be one of '${validMethod.join(", ")}'` + : undefined, url: !state.url ? i18n.str`required` : undefined, }; @@ -116,16 +116,42 @@ export function CreatePage({ onCreate, onBack }: Props): VNode { label={i18n.str`URL`} tooltip={i18n.str`URL of the webhook where the customer will be redirected`} /> - <Input<Entity> + + <p> + The text below support <a target="_blank" rel="noreferrer" href="https://mustache.github.io/mustache.5.html">mustache</a> template engine. Any string + between <pre style={{ display: "inline", padding: 0 }}>{{</pre> and <pre style={{ display: "inline", padding: 0 }}>}}</pre> will + be replaced with replaced with the value of the correspoding variable. + </p> + <p> + For example <pre style={{ display: "inline", padding: 0 }}>{{contract_terms.amount}}</pre> will be replaced + with the the order's price + </p> + <p> + The short list of variables are: + </p> + <div class="menu"> + + <ul class="menu-list" style={{ listStyleType: "disc", marginLeft: 20 }}> + <li><b>contract_terms.summary:</b> order's description </li> + <li><b>contract_terms.amount:</b> order's price </li> + <li><b>order_id:</b> order's unique identification </li> + {state.event_type === "refund" && <Fragment> + <li><b>refund_amout:</b> the amount that was being refunded</li> + <li><b>reason:</b> the reason entered by the merchant staff for granting the refund</li> + <li><b>timestamp:</b> time of the refund in nanoseconds since 1970</li> + </Fragment>} + </ul> + </div> + {/* <Input<Entity> name="header_template" - label={i18n.str`Header`} + label={i18n.str`Http header`} inputType="multiline" tooltip={i18n.str`Header template of the webhook`} - /> + /> */} <Input<Entity> name="body_template" inputType="multiline" - label={i18n.str`Body`} + label={i18n.str`Http body`} tooltip={i18n.str`Body template by the webhook`} /> </FormProvider> |