From cb535460350bd510dd4b2b7d6bc3c6ec5f5bcdf1 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 10 May 2023 00:53:37 -0300 Subject: almost first document --- .../src/forms/InputArray.tsx | 166 +++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 packages/exchange-backoffice-ui/src/forms/InputArray.tsx (limited to 'packages/exchange-backoffice-ui/src/forms/InputArray.tsx') diff --git a/packages/exchange-backoffice-ui/src/forms/InputArray.tsx b/packages/exchange-backoffice-ui/src/forms/InputArray.tsx new file mode 100644 index 000000000..f60ed4160 --- /dev/null +++ b/packages/exchange-backoffice-ui/src/forms/InputArray.tsx @@ -0,0 +1,166 @@ +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"; + +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]; + const formState = useState(selected ?? {}); + useEffect(() => { + const [, update] = formState; + update(selected); + }, [selected]); + return ( +
+ + +
+
+ {selectedIndex !== undefined && ( + + )} +
+
+ {selectedIndex === undefined && ( + + )} +
+
+
+ {list.map((v, idx) => { + const isFirst = idx === 0; + const isLast = idx === list.length - 1; + const isSelected = selectedIndex === idx; + const disabled = selectedIndex !== undefined && !isSelected; + 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 ( + + ); + })} +
+ {selectedIndex !== undefined && ( + +
+
+ +
+
+
+ )} + {selectedIndex !== undefined && ( +
+
+ {selected !== undefined && ( + + )} +
+
+ +
+
+ )} +
+ ); +} -- cgit v1.2.3