feat: modularize dashboard pages
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Callable
|
||||
|
||||
import streamlit as st
|
||||
|
||||
|
||||
class JarcaList:
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
render_header: Callable[[list[dict[str, Any]]], None] | None,
|
||||
render_item: Callable[[dict[str, Any]], None],
|
||||
items: list[dict[str, Any]],
|
||||
empty_message: str,
|
||||
) -> None:
|
||||
self.render_header = render_header
|
||||
self.render_item = render_item
|
||||
self.items = items
|
||||
self.empty_message = empty_message
|
||||
|
||||
def render(self) -> None:
|
||||
st.markdown(
|
||||
"""
|
||||
<style>
|
||||
.jarca-list {
|
||||
border: 0.0625rem solid #d1d9e0;
|
||||
border-radius: 0.375rem;
|
||||
padding: 0;
|
||||
margin: 1rem 0 0;
|
||||
gap: 0;
|
||||
}
|
||||
.st-key-jarca-list {
|
||||
border: 0.0625rem solid #d1d9e0;
|
||||
border-radius: 0.375rem;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
gap: 0;
|
||||
}
|
||||
.st-key-jarca-list-header {
|
||||
margin: 0;
|
||||
background-color: #f6f8fa;
|
||||
padding: 1rem;
|
||||
border-top-left-radius: 0.375rem;
|
||||
border-top-right-radius: 0.375rem;
|
||||
gap: 0;
|
||||
}
|
||||
.st-key-jarca-list-body {
|
||||
background-color: #ffffff;
|
||||
border-top: 0.0625rem solid #d1d9e0;
|
||||
border-bottom-left-radius: 0.375rem;
|
||||
border-bottom-right-radius: 0.375rem;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
gap: 0;
|
||||
}
|
||||
[class^="st-key-jarca-list-item-"],
|
||||
[class*=" st-key-jarca-list-item-"] {
|
||||
border-top: 0.0625rem solid #d1d9e0;
|
||||
margin: 0;
|
||||
padding: 1rem;
|
||||
gap: 0;
|
||||
}
|
||||
.st-key-jarca-list-item-0 {
|
||||
border-top: 0;
|
||||
}
|
||||
</style>
|
||||
""",
|
||||
unsafe_allow_html=True,
|
||||
)
|
||||
|
||||
with st.container(key="jarca-list", border=False):
|
||||
with st.container(key="jarca-list-header", border=False):
|
||||
if self.render_header:
|
||||
self.render_header(self.items)
|
||||
with st.container(key="jarca-list-body", border=False):
|
||||
for index, item in enumerate(self.items):
|
||||
with st.container(key=f"jarca-list-item-{index}", border=False):
|
||||
self.render_item(item)
|
||||
if not self.items:
|
||||
st.info(self.empty_message)
|
||||
Reference in New Issue
Block a user