/*
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
*/
/**
*
* @author Sebastian Javier Marchano (sebasjm)
*/
import { h, VNode } from "preact";
import { useState } from "preact/hooks";
import emptyImage from "../../assets/empty.png";
import { MerchantBackend, WithId } from "../../declaration.js";
import { Translate, useTranslator } from "../../i18n/index.js";
import { FormErrors, FormProvider } from "./FormProvider.js";
import { InputWithAddon } from "./InputWithAddon.js";
type Entity = MerchantBackend.Products.ProductDetail & WithId
export interface Props {
selected?: Entity;
onChange: (p?: Entity) => void;
products: (MerchantBackend.Products.ProductDetail & WithId)[],
}
interface ProductSearch {
name: string;
}
export function InputSearchProduct({ selected, onChange, products }: Props): VNode {
const [prodForm, setProdName] = useState>({ name: '' })
const errors: FormErrors = {
name: undefined
}
const i18n = useTranslator()
if (selected) {
return
Product id: {selected.id}
Description: {selected.description}
}
return errors={errors} object={prodForm} valueHandler={setProdName} >
name="name"
label={i18n`Product`}
tooltip={i18n`search products by it's description or id`}
addonAfter={}
>
{
setProdName({ name: '' })
onChange(p)
}}
/>
}
interface ProductListProps {
name?: string;
onSelect: (p: MerchantBackend.Products.ProductDetail & WithId) => void;
list: (MerchantBackend.Products.ProductDetail & WithId)[]
}
function ProductList({ name, onSelect, list }: ProductListProps) {
if (!name) {
/* FIXME
this BR is added to occupy the space that will be added when the
dropdown appears
*/
return