from reactable import Reactable, Column, embed_css
from reactable.data import sleep
embed_css()
Conditional styling (python)
You can conditionally style a table using functions that return inline styles or CSS classes. Just like with custom rendering, style functions can either be in Python or JavaScript.
Column()
argumentsstyle=
andclass_=
customize cell styles.Reactable()
argumentsrow_style=
androw_class=
customize row styles.
Cell styles
Pass a function to the Column()
parameter style=
to set conditional CSS styles. The function should take a single CellInfo
argument.
Below is an example function, which sets the color
and font-weight
styles.
from reactable.models import CellInfo
def cond_style(ci: CellInfo):
return {
"color": "#008800" if ci.value > 0 else "#e00000",
"font-weight": "bold",
}
Notice these 3 pieces:
cond_style
will be applied to every cell in a column.- The value of the CSS color depends on
ci.value
, which is the value of the current cell. - CSS rules are returned as a dictionary.
Here’s the function above used to conditionarlly style the "extra"
column:
Reactable(6, :],
sleep[:=[
columns
Column(id="extra",
=cond_style,
style
)
], )
Cell class
Pass a function to the Column()
parameter class_=
to set a class attribute on each cell in a column. Similar to style=
, the function should take a CellInfo
object.
Here’s an example, which sets some CSS, and then renders a table with class set to "big"
when the extra column is 3.4.
.big {
font-weight: bold;
color: red;
}
def big_class(ci: CellInfo):
return "big" if ci.value == 3.4 else None
Reactable(6, :],
sleep[:={
columns"extra": Column(class_=big_class),
}, )
Row styles and class
Pass a function to row_style=
or row_class=
to set row-based styles or class names, respectively. The function should take row number as its only argument.
.bold {
font-weight: bold;
}
# define conditional row style and row class functions ----
def f_row_style(indx: int):
if sleep[indx, "extra"] > 0:
return {"background": "rgba(0, 0, 0, 0.05)"}
def f_row_class(indx: int):
if sleep[indx, "extra"] > 0:
return "bold"
# generate table ----
Reactable(6, :],
sleep[:=f_row_style,
row_style=f_row_class,
row_class )