From 3a23b5cf481223647dafb493b7eef5bba84d6ce9 Mon Sep 17 00:00:00 2001 From: elio2t Date: Wed, 23 Oct 2024 14:23:44 +0200 Subject: [PATCH] feat: support locked fields --- demo/forms.py | 7 ++++++- src/npm-fastui/src/components/form.tsx | 2 +- src/python-fastui/fastui/json_schema.py | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/demo/forms.py b/demo/forms.py index 89716389..5513f429 100644 --- a/demo/forms.py +++ b/demo/forms.py @@ -1,6 +1,7 @@ from __future__ import annotations as _annotations import enum +import uuid from collections import defaultdict from datetime import date from typing import Annotated, Literal, TypeAlias @@ -164,11 +165,15 @@ class BigModel(BaseModel): None, title='Is human', description='Are you human?', json_schema_extra={'mode': 'switch'} ) size: SizeModel - position: tuple[ Annotated[int, Field(description='X Coordinate')], Annotated[int, Field(description='Y Coordinate')], ] + auto_generated_id: str = Field( + str(uuid.uuid4()), + description='This field is locked', + json_schema_extra={'locked': True}, + ) @field_validator('name') def name_validator(cls, v: str | None) -> str: diff --git a/src/npm-fastui/src/components/form.tsx b/src/npm-fastui/src/components/form.tsx index 62ae44eb..44afffa5 100644 --- a/src/npm-fastui/src/components/form.tsx +++ b/src/npm-fastui/src/components/form.tsx @@ -107,7 +107,7 @@ export const FormComp: FC
= (props) => { const f = { ...formField, error: fieldErrors[formField.name], - locked, + locked: locked || formField.locked, displayMode, onChange, } as FormFieldProps diff --git a/src/python-fastui/fastui/json_schema.py b/src/python-fastui/fastui/json_schema.py index c822f180..75f85108 100644 --- a/src/python-fastui/fastui/json_schema.py +++ b/src/python-fastui/fastui/json_schema.py @@ -182,6 +182,7 @@ def json_schema_field_to_field( name=name, title=title, required=required, + locked=schema.get('locked', False), initial=schema.get('default'), description=schema.get('description'), mode=schema.get('mode', 'checkbox'), @@ -194,6 +195,7 @@ def json_schema_field_to_field( title=title, html_type=input_html_type(schema), required=required, + locked=schema.get('locked', False), initial=schema.get('default'), autocomplete=schema.get('autocomplete'), description=schema.get('description'), @@ -244,6 +246,7 @@ def special_string_field( name=name, title=title, required=required, + locked=schema.get('locked', False), multiple=multiple, accept=schema.get('accept'), description=schema.get('description'), @@ -253,6 +256,7 @@ def special_string_field( name=name, title=title, required=required, + locked=schema.get('locked', False), rows=schema.get('rows'), cols=schema.get('cols'), placeholder=schema.get('placeholder'), @@ -267,6 +271,7 @@ def special_string_field( title=title, placeholder=schema.get('placeholder'), required=required, + locked=schema.get('locked', False), multiple=multiple, options=[SelectOption(value=v, label=enum_labels.get(v) or as_title(v)) for v in enum], initial=schema.get('default'), @@ -280,6 +285,7 @@ def special_string_field( title=title, placeholder=schema.get('placeholder'), required=required, + locked=schema.get('locked', False), multiple=multiple, initial=schema.get('initial'), description=schema.get('description'),