import { Fragment, VNode, h } from "preact"; import { useEffect, useState } from "preact/hooks"; import { FormProvider } from "./FormProvider.js"; import { LabelWithTooltipMaybeRequired, UIFormProps } from "./InputLine.js"; import { RenderAllFieldsByUiConfig, UIFormField } from "./forms.js"; import { useField } from "./useField.js"; import { TranslatedString } from "@gnu-taler/taler-util"; function Option({ label, disabled, isFirst, isLast, isSelected, onClick, }: { label: TranslatedString; isFirst?: boolean; isLast?: boolean; isSelected?: boolean; disabled?: boolean; onClick: () => void; }): VNode { let clazz = "relative flex border p-4 focus:outline-none disabled:text-grey"; if (isFirst) { clazz += " rounded-tl-md rounded-tr-md "; } if (isLast) { clazz += " rounded-bl-md rounded-br-md "; } if (isSelected) { clazz += " z-10 border-indigo-200 bg-indigo-50 "; } else { clazz += " border-gray-200"; } if (disabled) { clazz += " cursor-not-allowed bg-gray-50 text-gray-500 ring-gray-200 text-gray"; } else { clazz += " cursor-pointer"; } return ( {label} {/* */} {/* This project would be available to anyone who has the link */} ); } export function InputArray( props: { fields: UIFormField[]; labelField: string; } & UIFormProps>, ): VNode { const { fields, labelField, name, label, required, tooltip } = props; const { value, onChange } = useField<{ [s: string]: Array }>(name); const list = value ?? []; const [selectedIndex, setSelected] = useState(undefined); const selected = selectedIndex === undefined ? undefined : list[selectedIndex]; return ( {list.map((v, idx) => { return ( { setSelected(selectedIndex === idx ? undefined : idx); }} /> ); })} { setSelected( selectedIndex === list.length ? undefined : list.length, ); }} /> {selectedIndex !== undefined && ( { const newValue = [...list]; newValue.splice(selectedIndex, 1, v); onChange(newValue); }} > )} {selectedIndex !== undefined && ( {selected !== undefined && ( { const newValue = [...list]; newValue.splice(selectedIndex, 1); onChange(newValue); setSelected(undefined); }} class="block rounded-md bg-red-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-red-500 " > Remove )} {/* { const newValue = [...list]; newValue.splice(selectedIndex, 1, subForm); onChange(newValue); setSelected(undefined); }} class="block rounded-md bg-indigo-600 px-3 py-2 text-center text-sm text-white shadow-sm hover:bg-indigo-500 " > Confirm */} )} ); }