/*
This file is part of GNU Taler
(C) 2021 Taler Systems S.A.
GNU Taler is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.
GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
GNU Taler; see the file COPYING. If not, see
*/
import { Fragment, h, VNode } from "preact";
import { useCallback, useEffect, useState } from "preact/hooks";
import * as yup from 'yup';
import { FormErrors, FormProvider } from "../form/FormProvider";
import { Input } from "../form/Input";
import { InputCurrency } from "../form/InputCurrency";
import { InputImage } from "../form/InputImage";
import { InputNumber } from "../form/InputNumber";
import { InputTaxes } from "../form/InputTaxes";
import { MerchantBackend } from "../../declaration";
import { useListener } from "../../hooks/listener";
import { Translate, useTranslator } from "../../i18n";
import {
NonInventoryProductSchema as schema
} from '../../schemas';
type Entity = MerchantBackend.Product
interface Props {
onAddProduct: (p: Entity) => Promise;
productToEdit?: Entity;
}
export function NonInventoryProductFrom({ productToEdit, onAddProduct }: Props): VNode {
const [showCreateProduct, setShowCreateProduct] = useState(false)
const isEditing = !!productToEdit
useEffect(() => {
setShowCreateProduct(isEditing)
}, [isEditing])
const [submitForm, addFormSubmitter] = useListener | undefined>((result) => {
if (result) {
setShowCreateProduct(false)
return onAddProduct({
quantity: result.quantity || 0,
taxes: result.taxes || [],
description: result.description || '',
image: result.image || '',
price: result.price || '',
unit: result.unit || ''
})
}
return Promise.resolve()
})
const i18n = useTranslator()
return
name="product" errors={errors} object={value} valueHandler={valueHandler} >
name="image" label={i18n`Image`} tooltip={i18n`photo of the product`} />
name="description" inputType="multiline" label={i18n`Description`} tooltip={i18n`full product description`} />
name="unit" label={i18n`Unit`} tooltip={i18n`name of the product unit`} />
name="price" label={i18n`Price`} tooltip={i18n`amount in the current currency`} />
name="quantity" label={i18n`Quantity`} tooltip={i18n`how many products will be added`} />
name="taxes" label={i18n`Taxes`} />