from odmantic import Model, Reference
from pydantic import model_validator
from simstack.models import simstack_model
[docs]
@simstack_model
class IntData(Model):
field_name: str = "int"
value: int
[docs]
@model_validator(mode="before")
@classmethod
def ensure_fieldname(cls, data):
"""Ensure fieldname is set for existing documents"""
if isinstance(data, dict) and "field_name" not in data:
data["field_name"] = "int"
return data
[docs]
def make_table_entries(
self,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return {self.field_name: self.value}
[docs]
def make_column_defs_instance(
self,
table_name=None,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return [
{
"field": self.field_name,
"headerName": self.field_name,
"type": "numericColumn",
}
]
[docs]
@classmethod
def ui_schema(cls, **kwargs) -> dict:
return {
"ui:field": "IntDataField"
} # This tells RJSF to use the custom component
[docs]
@simstack_model
class FloatData(Model):
field_name: str = "float"
value: float
[docs]
@model_validator(mode="before")
@classmethod
def ensure_fieldname(cls, data):
"""Ensure fieldname is set for existing documents"""
if isinstance(data, dict) and "field_name" not in data:
data["field_name"] = "float"
return data
[docs]
def make_table_entries(
self,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return {self.field_name: self.value}
[docs]
def make_column_defs_instance(
self,
table_name=None,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return [
{
"field": self.field_name,
"headerName": self.field_name,
"type": "numericColumn",
}
]
[docs]
@classmethod
def ui_schema(cls, **kwargs) -> dict:
return {
"ui:field": "FloatDataField"
} # This tells RJSF to use the custom component
[docs]
@simstack_model
class StringData(Model):
field_name: str = "text"
value: str
[docs]
@model_validator(mode="before")
@classmethod
def ensure_fieldname(cls, data):
"""Ensure fieldname is set for existing documents"""
if isinstance(data, dict) and "field_name" not in data:
data["field_name"] = "text"
return data
[docs]
def make_table_entries(
self,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return {self.field_name: self.value}
[docs]
def make_column_defs_instance(
self,
table_name=None,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return [
{
"field": self.field_name,
"headerName": self.field_name,
"type": "textColumn",
}
]
[docs]
@classmethod
def ui_schema(cls, **kwargs) -> dict:
return {
"ui:field": "StringDataField"
} # This tells RJSF to use the custom component
[docs]
@simstack_model
class BooleanData(Model):
field_name: str = "boolean"
value: bool
[docs]
@model_validator(mode="before")
@classmethod
def ensure_fieldname(cls, data):
"""Ensure fieldname is set for existing documents"""
if isinstance(data, dict) and "field_name" not in data:
data["field_name"] = "boolean"
return data
[docs]
def make_table_entries(
self,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return {self.field_name: self.value}
[docs]
def make_column_defs_instance(
self,
table_name=None,
max_recursion_level=1,
drop_id=True,
current_level=0,
visited=None,
field_prefix="",
):
return [
{
"field": self.field_name,
"headerName": self.field_name,
"type": "booleanColumn",
}
]
[docs]
@classmethod
def ui_schema(cls, **kwargs) -> dict:
return {
"ui:field": "BooleanDataField"
} # This tells RJSF to use the custom component