Added draft of DataGridColumnsManager that uses Search and Dropdown
This commit is contained in:
@@ -459,7 +459,7 @@
|
|||||||
|
|
||||||
.mf-search-results {
|
.mf-search-results {
|
||||||
margin-top: 0.5rem;
|
margin-top: 0.5rem;
|
||||||
max-height: 200px;
|
max-height: 400px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from myfasthtml.controls.CycleStateControl import CycleStateControl
|
|||||||
from myfasthtml.controls.DataGridColumnsManager import DataGridColumnsManager
|
from myfasthtml.controls.DataGridColumnsManager import DataGridColumnsManager
|
||||||
from myfasthtml.controls.DataGridQuery import DataGridQuery, DG_QUERY_FILTER
|
from myfasthtml.controls.DataGridQuery import DataGridQuery, DG_QUERY_FILTER
|
||||||
from myfasthtml.controls.Mouse import Mouse
|
from myfasthtml.controls.Mouse import Mouse
|
||||||
|
from myfasthtml.controls.Panel import Panel
|
||||||
from myfasthtml.controls.datagrid_objects import DataGridColumnState, DataGridRowState, \
|
from myfasthtml.controls.datagrid_objects import DataGridColumnState, DataGridRowState, \
|
||||||
DatagridSelectionState, DataGridHeaderFooterConf, DatagridEditionState
|
DatagridSelectionState, DataGridHeaderFooterConf, DatagridEditionState
|
||||||
from myfasthtml.controls.helpers import mk
|
from myfasthtml.controls.helpers import mk
|
||||||
@@ -138,6 +139,8 @@ class DataGrid(MultipleInstance):
|
|||||||
self.commands = Commands(self)
|
self.commands = Commands(self)
|
||||||
self.init_from_dataframe(self._state.ne_df, init_state=False) # state comes from DatagridState
|
self.init_from_dataframe(self._state.ne_df, init_state=False) # state comes from DatagridState
|
||||||
|
|
||||||
|
self._panel = Panel(self, _id="-panel")
|
||||||
|
|
||||||
# add DataGridQuery
|
# add DataGridQuery
|
||||||
self._datagrid_filter = DataGridQuery(self)
|
self._datagrid_filter = DataGridQuery(self)
|
||||||
self._datagrid_filter.bind_command("QueryChanged", self.commands.filter())
|
self._datagrid_filter.bind_command("QueryChanged", self.commands.filter())
|
||||||
@@ -649,7 +652,7 @@ class DataGrid(MultipleInstance):
|
|||||||
self._columns_manager,
|
self._columns_manager,
|
||||||
cls="flex"),
|
cls="flex"),
|
||||||
cls="flex items-center justify-between mb-2"),
|
cls="flex items-center justify-between mb-2"),
|
||||||
self.mk_table(),
|
self._panel.set_main(self.mk_table()),
|
||||||
Script(f"initDataGrid('{self._id}');"),
|
Script(f"initDataGrid('{self._id}');"),
|
||||||
Mouse(self, combinations=self._mouse_support),
|
Mouse(self, combinations=self._mouse_support),
|
||||||
id=self._id,
|
id=self._id,
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
from fasthtml.components import Div
|
from fasthtml.components import *
|
||||||
|
|
||||||
from myfasthtml.controls.Dropdown import Dropdown
|
from myfasthtml.controls.Dropdown import Dropdown
|
||||||
|
from myfasthtml.controls.Search import Search
|
||||||
|
from myfasthtml.controls.datagrid_objects import DataGridColumnState
|
||||||
from myfasthtml.controls.helpers import mk
|
from myfasthtml.controls.helpers import mk
|
||||||
from myfasthtml.icons.fluent_p1 import settings16_regular
|
from myfasthtml.icons.fluent_p1 import settings16_regular
|
||||||
|
|
||||||
@@ -9,7 +11,23 @@ class DataGridColumnsManager(Dropdown):
|
|||||||
def __init__(self, parent, _id=None):
|
def __init__(self, parent, _id=None):
|
||||||
super().__init__(parent, _id=_id, align="right")
|
super().__init__(parent, _id=_id, align="right")
|
||||||
self.button = mk.icon(settings16_regular)
|
self.button = mk.icon(settings16_regular)
|
||||||
self.content = Div("DataGridColumnsManager")
|
self.content = self.create_content()
|
||||||
|
|
||||||
|
def mk_column(self, col_def: DataGridColumnState):
|
||||||
|
return Div(
|
||||||
|
Input(type="checkbox", checked=col_def.visible, cls="ml-2"),
|
||||||
|
Label(col_def.col_id, cls="ml-2"),
|
||||||
|
cls="flex mb-1",
|
||||||
|
)
|
||||||
|
|
||||||
|
def create_content(self):
|
||||||
|
return Search(self,
|
||||||
|
items_names="Columns",
|
||||||
|
items=self.columns,
|
||||||
|
get_attr=lambda x: x.col_id,
|
||||||
|
template=self.mk_column
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
def columns(self):
|
def columns(self):
|
||||||
return self._parent._state.columns
|
return self._parent._state.columns
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from fasthtml.components import Div
|
|||||||
from myfasthtml.controls.BaseCommands import BaseCommands
|
from myfasthtml.controls.BaseCommands import BaseCommands
|
||||||
from myfasthtml.controls.DataGrid import DataGrid
|
from myfasthtml.controls.DataGrid import DataGrid
|
||||||
from myfasthtml.controls.FileUpload import FileUpload
|
from myfasthtml.controls.FileUpload import FileUpload
|
||||||
from myfasthtml.controls.Panel import Panel
|
|
||||||
from myfasthtml.controls.TabsManager import TabsManager
|
from myfasthtml.controls.TabsManager import TabsManager
|
||||||
from myfasthtml.controls.TreeView import TreeView, TreeNode
|
from myfasthtml.controls.TreeView import TreeView, TreeNode
|
||||||
from myfasthtml.controls.helpers import mk
|
from myfasthtml.controls.helpers import mk
|
||||||
@@ -106,7 +105,7 @@ class DataGridsManager(MultipleInstance):
|
|||||||
parent_id = self._tree.ensure_path(document.namespace)
|
parent_id = self._tree.ensure_path(document.namespace)
|
||||||
tree_node = TreeNode(label=document.name, type="excel", parent=parent_id)
|
tree_node = TreeNode(label=document.name, type="excel", parent=parent_id)
|
||||||
self._tree.add_node(tree_node, parent_id=parent_id)
|
self._tree.add_node(tree_node, parent_id=parent_id)
|
||||||
return self._mk_tree(), self._tabs_manager.change_tab_content(tab_id, document.name, Panel(self).set_main(dg))
|
return self._mk_tree(), self._tabs_manager.change_tab_content(tab_id, document.name, dg)
|
||||||
|
|
||||||
def select_document(self, node_id):
|
def select_document(self, node_id):
|
||||||
document_id = self._tree.get_bag(node_id)
|
document_id = self._tree.get_bag(node_id)
|
||||||
@@ -137,9 +136,7 @@ class DataGridsManager(MultipleInstance):
|
|||||||
|
|
||||||
# Recreate the DataGrid with its saved state
|
# Recreate the DataGrid with its saved state
|
||||||
dg = DataGrid(self._tabs_manager, _id=document.datagrid_id) # reload the state & settings
|
dg = DataGrid(self._tabs_manager, _id=document.datagrid_id) # reload the state & settings
|
||||||
|
return dg
|
||||||
# Wrap in Panel
|
|
||||||
return Panel(self).set_main(dg)
|
|
||||||
|
|
||||||
def clear_tree(self):
|
def clear_tree(self):
|
||||||
self._state.elements = []
|
self._state.elements = []
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class Search(MultipleInstance):
|
|||||||
self.items = items or []
|
self.items = items or []
|
||||||
self.filtered = self.items.copy()
|
self.filtered = self.items.copy()
|
||||||
self.get_attr = get_attr or (lambda x: x)
|
self.get_attr = get_attr or (lambda x: x)
|
||||||
self.template = template or Div
|
self.template = template or (lambda x: Div(self.get_attr(x)))
|
||||||
self.commands = Commands(self)
|
self.commands = Commands(self)
|
||||||
|
|
||||||
def set_items(self, items):
|
def set_items(self, items):
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class BaseInstance:
|
|||||||
return _id
|
return _id
|
||||||
|
|
||||||
if _id.startswith("-") and parent is not None:
|
if _id.startswith("-") and parent is not None:
|
||||||
return f"{parent.get_prefix()}{_id}"
|
return f"{parent.get_id()}{_id}"
|
||||||
|
|
||||||
return _id
|
return _id
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user