smartentrol / tools /agstyler.py
ShekDass's picture
Upload 276 files
116eb6b
raw
history blame contribute delete
No virus
2.18 kB
# adjusted from: https://github.com/nryabykh/streamlit-aggrid-hints
from st_aggrid import AgGrid
from st_aggrid.grid_options_builder import GridOptionsBuilder
from st_aggrid.shared import GridUpdateMode, JsCode
def get_numeric_style_with_precision(precision: int) -> dict:
return {"type": ["numericColumn", "customNumericFormat"], "precision": precision}
PRECISION_ZERO = get_numeric_style_with_precision(0)
PRECISION_ONE = get_numeric_style_with_precision(1)
PRECISION_TWO = get_numeric_style_with_precision(2)
PINLEFT = {"pinned": "left"}
def draw_grid(
df,
formatter: dict = None,
selection="multiple",
use_checkbox=False,
fit_columns=False,
pagination_size=0,
theme="streamlit",
wrap_text: bool = False,
auto_height: bool = False,
grid_options: dict = None,
key=None,
css: dict = None
):
gb = GridOptionsBuilder()
gb.configure_default_column(
filterable=True,
groupable=False,
editable=False,
wrapText=wrap_text,
autoHeight=auto_height
)
if grid_options is not None:
gb.configure_grid_options(**grid_options)
for latin_name, (cyr_name, style_dict) in formatter.items():
gb.configure_column(latin_name, header_name=cyr_name, **style_dict)
gb.configure_selection(selection_mode=selection, use_checkbox=use_checkbox)
if pagination_size > 0:
gb.configure_pagination(enabled=True, paginationAutoPageSize=False, paginationPageSize=pagination_size)
return AgGrid(
df,
gridOptions=gb.build(),
update_mode=GridUpdateMode.SELECTION_CHANGED | GridUpdateMode.VALUE_CHANGED,
allow_unsafe_jscode=True,
fit_columns_on_grid_load=fit_columns,
theme=theme,
key=key,
custom_css=css,
enable_enterprise_modules=False
)
def highlight(color, condition):
code = f"""
function(params) {{
color = "{color}";
if ({condition}) {{
return {{
'backgroundColor': color
}}
}}
}};
"""
return JsCode(code)