I can save and load Datagrid content

This commit is contained in:
2026-01-06 18:46:17 +01:00
parent 2f808ed226
commit 70abf21c14
6 changed files with 47 additions and 18 deletions

View File

@@ -12,7 +12,7 @@ from myfasthtml.core.instances import MultipleInstance
class DatagridState(DbObject):
def __init__(self, owner):
super().__init__(owner)
super().__init__(owner, name=f"{owner.get_full_id()}-state")
with self.initializing():
self.sidebar_visible: bool = False
self.selected_view: str = None
@@ -25,12 +25,12 @@ class DatagridState(DbObject):
self.filtered: dict = {}
self.edition: DatagridEditionState = DatagridEditionState()
self.selection: DatagridSelectionState = DatagridSelectionState()
self.html = None
self.ne_data = None
class DatagridSettings(DbObject):
def __init__(self, owner):
super().__init__(owner)
super().__init__(owner, name=f"{owner.get_full_id()}-settings")
with self.initializing():
self.file_name: Optional[str] = None
self.selected_sheet_name: Optional[str] = None
@@ -52,12 +52,13 @@ class DataGrid(MultipleInstance):
self._state = DatagridState(self)
self.commands = Commands(self)
def set_html(self, html):
self._state.html = html
def init_from_dataframe(self, df):
self._state.ne_data = df
def render(self):
html = self._state.ne_data.to_html(index=False) if self._state.ne_data is not None else "Content lost !"
return Div(
NotStr(self._state.html) if self._state.html else "Content lost !",
NotStr(html),
id=self._id
)

View File

@@ -23,7 +23,7 @@ class DocumentDefinition:
document_id: str
namespace: str
name: str
type: str
type: str # table, card,
tab_id: str
datagrid_id: str
@@ -32,7 +32,7 @@ class DataGridsState(DbObject):
def __init__(self, owner, name=None):
super().__init__(owner, name=name)
with self.initializing():
self.elements: list = [DocumentDefinition]
self.elements: list[DocumentDefinition] = []
class Commands(BaseCommands):
@@ -91,9 +91,8 @@ class DataGridsManager(MultipleInstance):
def open_from_excel(self, tab_id, file_upload: FileUpload):
excel_content = file_upload.get_content()
df = pd.read_excel(excel_content, file_upload.get_sheet_name())
html = df.to_html(index=False)
dg = DataGrid(self._tabs_manager)
dg.set_html(html)
dg.init_from_dataframe(df)
document = DocumentDefinition(
document_id=str(uuid.uuid4()),
namespace=file_upload.get_file_basename(),

View File

@@ -55,13 +55,14 @@ class DbObject:
self._initializing = old_state
def __setattr__(self, name: str, value: str):
if name.startswith("_") or name.startswith("ns") or getattr(self, "_initializing", False):
if name.startswith("_") or name.startswith("ns_") or getattr(self, "_initializing", False):
super().__setattr__(name, value)
return
old_value = getattr(self, name, None)
if old_value == value:
return
if not name.startswith("ne_"):
old_value = getattr(self, name, None)
if old_value == value:
return
super().__setattr__(name, value)
self._save_self()

View File

@@ -144,8 +144,11 @@ class UniqueInstance(BaseInstance):
parent: Optional[BaseInstance] = None,
session: Optional[dict] = None,
_id: Optional[str] = None,
auto_register: bool = True):
auto_register: bool = True,
on_init=None):
super().__init__(parent, session, _id, auto_register)
if on_init is not None:
on_init()
class MultipleInstance(BaseInstance):