From 5096f28d2de7219f31196db91146062278a9468a Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 13 Feb 2024 16:46:09 +0000 Subject: [PATCH 1/3] add `autocomplete` to `textarea` and `select` --- src/npm-fastui/src/components/FormField.tsx | 6 ++++-- src/npm-fastui/src/models.d.ts | 3 +++ src/python-fastui/fastui/components/forms.py | 3 +++ src/python-fastui/fastui/json_schema.py | 3 +++ 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/npm-fastui/src/components/FormField.tsx b/src/npm-fastui/src/components/FormField.tsx index 1676eb1d..3bfe8ac6 100644 --- a/src/npm-fastui/src/components/FormField.tsx +++ b/src/npm-fastui/src/components/FormField.tsx @@ -51,7 +51,7 @@ interface FormFieldTextareaProps extends FormFieldTextarea { } export const FormFieldTextareaComp: FC = (props) => { - const { name, placeholder, required, locked, rows, cols } = props + const { name, placeholder, required, locked, rows, cols , autocomplete} = props return (
@@ -141,7 +142,7 @@ export const FormFieldSelectComp: FC = (props) => { } export const FormFieldSelectVanillaComp: FC = (props) => { - const { name, required, locked, options, multiple, initial, placeholder, onChange } = props + const { name, required, locked, options, multiple, initial, placeholder, onChange, autocomplete } = props const className = useClassName(props) const classNameSelect = useClassName(props, { el: 'select' }) @@ -159,6 +160,7 @@ export const FormFieldSelectVanillaComp: FC = (props) => { aria-describedby={descId(props)} placeholder={placeholder} onChange={() => onChange && onChange()} + autoComplete={autocomplete} > {multiple ? null : } {options.map((option, i) => ( diff --git a/src/npm-fastui/src/models.d.ts b/src/npm-fastui/src/models.d.ts index 1f85fd49..b07279c5 100644 --- a/src/npm-fastui/src/models.d.ts +++ b/src/npm-fastui/src/models.d.ts @@ -363,6 +363,7 @@ export interface FormFieldTextarea { cols?: number initial?: string placeholder?: string + autocomplete?: string type: 'FormFieldTextarea' } export interface FormFieldBoolean { @@ -405,6 +406,7 @@ export interface FormFieldSelect { initial?: string[] | string vanilla?: boolean placeholder?: string + autocomplete?: string type: 'FormFieldSelect' } export interface SelectOption { @@ -429,6 +431,7 @@ export interface FormFieldSelectSearch { initial?: SelectOption debounce?: number placeholder?: string + autocomplete?: string type: 'FormFieldSelectSearch' } export interface ModelForm { diff --git a/src/python-fastui/fastui/components/forms.py b/src/python-fastui/fastui/components/forms.py index 6f0b92a1..53998cbb 100644 --- a/src/python-fastui/fastui/components/forms.py +++ b/src/python-fastui/fastui/components/forms.py @@ -40,6 +40,7 @@ class FormFieldTextarea(BaseFormField): cols: _t.Union[int, None] = None initial: _t.Union[str, None] = None placeholder: _t.Union[str, None] = None + autocomplete: _t.Union[str, None] = None type: _t.Literal['FormFieldTextarea'] = 'FormFieldTextarea' @@ -61,6 +62,7 @@ class FormFieldSelect(BaseFormField): initial: _t.Union[_t.List[str], str, None] = None vanilla: _t.Union[bool, None] = None placeholder: _t.Union[str, None] = None + autocomplete: _t.Union[str, None] = None type: _t.Literal['FormFieldSelect'] = 'FormFieldSelect' @@ -71,6 +73,7 @@ class FormFieldSelectSearch(BaseFormField): # time in ms to debounce requests by, defaults to 300ms debounce: _t.Union[int, None] = None placeholder: _t.Union[str, None] = None + autocomplete: _t.Union[str, None] = None type: _t.Literal['FormFieldSelectSearch'] = 'FormFieldSelectSearch' diff --git a/src/python-fastui/fastui/json_schema.py b/src/python-fastui/fastui/json_schema.py index e0ee88da..f334c8c1 100644 --- a/src/python-fastui/fastui/json_schema.py +++ b/src/python-fastui/fastui/json_schema.py @@ -257,6 +257,7 @@ def special_string_field( placeholder=schema.get('placeholder'), initial=schema.get('initial'), description=schema.get('description'), + autocomplete=schema.get('autocomplete'), ) elif enum := schema.get('enum'): enum_labels = schema.get('enum_labels', {}) @@ -269,6 +270,7 @@ def special_string_field( options=[SelectOption(value=v, label=enum_labels.get(v) or as_title(v)) for v in enum], initial=schema.get('default'), description=schema.get('description'), + autocomplete=schema.get('autocomplete'), ) elif search_url := schema.get('search_url'): return FormFieldSelectSearch( @@ -280,6 +282,7 @@ def special_string_field( multiple=multiple, initial=schema.get('initial'), description=schema.get('description'), + autocomplete=schema.get('autocomplete'), ) From 6e527b397153ab1e6f908d43a86f65a8dda18d13 Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 13 Feb 2024 16:48:50 +0000 Subject: [PATCH 2/3] run prettier --- src/npm-fastui/src/components/FormField.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/npm-fastui/src/components/FormField.tsx b/src/npm-fastui/src/components/FormField.tsx index 3bfe8ac6..d1b30c78 100644 --- a/src/npm-fastui/src/components/FormField.tsx +++ b/src/npm-fastui/src/components/FormField.tsx @@ -51,7 +51,7 @@ interface FormFieldTextareaProps extends FormFieldTextarea { } export const FormFieldTextareaComp: FC = (props) => { - const { name, placeholder, required, locked, rows, cols , autocomplete} = props + const { name, placeholder, required, locked, rows, cols, autocomplete } = props return (