diff options
author | Sebastian <sebasjm@gmail.com> | 2023-05-22 10:40:13 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-05-22 10:40:13 -0300 |
commit | 3e95ae356a98d01e523bdf48547db4114ff224fe (patch) | |
tree | 7cc1e488b902bb3a3eeba92ff81ea0e383ed542d /packages/exchange-backoffice-ui/src/handlers/InputLine.tsx | |
parent | 0544b8358af68df87dbc472221d8c0842c2b2db0 (diff) | |
download | wallet-core-3e95ae356a98d01e523bdf48547db4114ff224fe.tar.gz wallet-core-3e95ae356a98d01e523bdf48547db4114ff224fe.tar.bz2 wallet-core-3e95ae356a98d01e523bdf48547db4114ff224fe.zip |
fix break on build
Diffstat (limited to 'packages/exchange-backoffice-ui/src/handlers/InputLine.tsx')
-rw-r--r-- | packages/exchange-backoffice-ui/src/handlers/InputLine.tsx | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/packages/exchange-backoffice-ui/src/handlers/InputLine.tsx b/packages/exchange-backoffice-ui/src/handlers/InputLine.tsx index 32b16313d..8e847a273 100644 --- a/packages/exchange-backoffice-ui/src/handlers/InputLine.tsx +++ b/packages/exchange-backoffice-ui/src/handlers/InputLine.tsx @@ -22,8 +22,8 @@ interface StringConverter<T> { fromStringUI: (v?: string) => T; } -export interface UIFormProps<T> { - name: keyof T; +export interface UIFormProps<T extends object, K extends keyof T> { + name: K; label: TranslatedString; placeholder?: TranslatedString; tooltip?: TranslatedString; @@ -31,7 +31,7 @@ export interface UIFormProps<T> { before?: Addon; after?: Addon; required?: boolean; - converter?: StringConverter<T>; + converter?: StringConverter<T[K]>; } export type FormErrors<T> = { @@ -102,7 +102,7 @@ export function LabelWithTooltipMaybeRequired({ return WithTooltip; } -function InputWrapper<T>({ +function InputWrapper<T extends object, K extends keyof T>({ children, label, tooltip, @@ -111,7 +111,7 @@ function InputWrapper<T>({ help, error, required, -}: { error?: string; children: ComponentChildren } & UIFormProps<T>): VNode { +}: { error?: string; children: ComponentChildren } & UIFormProps<T, K>): VNode { return ( <div class="sm:col-span-6"> <LabelWithTooltipMaybeRequired @@ -181,13 +181,13 @@ function defaultFromString(v: string) { return v; } -type InputType = "text" | "text-area" | "password" | "email"; +type InputType = "text" | "text-area" | "password" | "email" | "number"; -export function InputLine<T>( - props: { type: InputType } & UIFormProps<T>, +export function InputLine<T extends object, K extends keyof T>( + props: { type: InputType } & UIFormProps<T, K>, ): VNode { const { name, placeholder, before, after, converter, type } = props; - const { value, onChange, state, isDirty } = useField(name); + const { value, onChange, state, isDirty } = useField<T, K>(name); if (state.hidden) return <div />; @@ -239,7 +239,10 @@ export function InputLine<T>( if (type === "text-area") { return ( - <InputWrapper<T> {...props} error={showError ? state.error : undefined}> + <InputWrapper<T, K> + {...props} + error={showError ? state.error : undefined} + > <textarea rows={4} name={String(name)} @@ -258,7 +261,7 @@ export function InputLine<T>( } return ( - <InputWrapper<T> {...props} error={showError ? state.error : undefined}> + <InputWrapper<T, K> {...props} error={showError ? state.error : undefined}> <input name={String(name)} type={type} |