Working version of tabsearch. Added subsequent and fuzzy matching. Need to fix the unit tests
This commit is contained in:
@@ -77,11 +77,6 @@ class Commands(BaseCommands):
|
||||
return Command(f"{self._prefix}UpdateBoundaries",
|
||||
"Update component boundaries",
|
||||
self._owner.update_boundaries).htmx(target=None)
|
||||
|
||||
def search_tab(self, query: str):
|
||||
return Command(f"{self._prefix}SearchTab",
|
||||
"Search for a tab by name",
|
||||
self._owner.search_tab, query).htmx(target=f"#{self._id}-dropdown-content")
|
||||
|
||||
|
||||
class TabsManager(MultipleInstance):
|
||||
@@ -97,7 +92,10 @@ class TabsManager(MultipleInstance):
|
||||
self._state = TabsManagerState(self)
|
||||
self.commands = Commands(self)
|
||||
self._boundaries = Boundaries()
|
||||
self._search = Search(self._session).set_items(self._get_tabs_labels())
|
||||
self._search = Search(self._session,
|
||||
items=self._get_tab_list(),
|
||||
get_attr=lambda x: x["label"],
|
||||
template=self._mk_tab_button)
|
||||
logger.debug(f"TabsManager created with id: {self._id}")
|
||||
logger.debug(f" tabs : {self._get_ordered_tabs()}")
|
||||
logger.debug(f" active tab : {self._state.active_tab}")
|
||||
@@ -176,6 +174,7 @@ class TabsManager(MultipleInstance):
|
||||
|
||||
# Add tab metadata to state
|
||||
state.tabs[tab_id] = {
|
||||
'id': tab_id,
|
||||
'label': label,
|
||||
'component_type': component_type,
|
||||
'component_id': component_id
|
||||
@@ -193,7 +192,7 @@ class TabsManager(MultipleInstance):
|
||||
|
||||
# finally, update the state
|
||||
self._state.update(state)
|
||||
self._search.set_items(self._get_tabs_labels())
|
||||
self._search.set_items(self._get_tab_list())
|
||||
|
||||
return tab_id
|
||||
|
||||
@@ -251,23 +250,10 @@ class TabsManager(MultipleInstance):
|
||||
|
||||
# Update state
|
||||
self._state.update(state)
|
||||
self._search.set_items(self._get_tabs_labels())
|
||||
self._search.set_items(self._get_tab_list())
|
||||
|
||||
return self
|
||||
|
||||
def search_tab(self, query: str):
|
||||
"""
|
||||
Search tabs by name (for dropdown search).
|
||||
|
||||
Args:
|
||||
query: Search query
|
||||
|
||||
Returns:
|
||||
Dropdown content with filtered tabs
|
||||
"""
|
||||
# This will be implemented later for search functionality
|
||||
pass
|
||||
|
||||
def add_tab_btn(self):
|
||||
return mk.icon(tab_add24_regular,
|
||||
id=f"{self._id}-add-tab-btn",
|
||||
@@ -285,7 +271,7 @@ class TabsManager(MultipleInstance):
|
||||
def _mk_tabs_header(self, oob=False):
|
||||
# Create visible tab buttons
|
||||
visible_tab_buttons = [
|
||||
self._mk_tab_button(tab_id, self._state.tabs[tab_id])
|
||||
self._mk_tab_button(self._state.tabs[tab_id])
|
||||
for tab_id in self._state.tabs_order
|
||||
if tab_id in self._state.tabs
|
||||
]
|
||||
@@ -300,7 +286,7 @@ class TabsManager(MultipleInstance):
|
||||
hx_swap_oob="true" if oob else None
|
||||
)
|
||||
|
||||
def _mk_tab_button(self, tab_id: str, tab_data: dict, in_dropdown: bool = False):
|
||||
def _mk_tab_button(self, tab_data: dict, in_dropdown: bool = False):
|
||||
"""
|
||||
Create a single tab button with its label and close button.
|
||||
|
||||
@@ -312,6 +298,7 @@ class TabsManager(MultipleInstance):
|
||||
Returns:
|
||||
Button element representing the tab
|
||||
"""
|
||||
tab_id = tab_data["id"]
|
||||
is_active = tab_id == self._state.active_tab
|
||||
|
||||
close_btn = mk.mk(
|
||||
@@ -382,8 +369,8 @@ class TabsManager(MultipleInstance):
|
||||
hx_swap_oob=f"beforeend:#{self._id}-content-wrapper",
|
||||
)
|
||||
|
||||
def _get_tabs_labels(self):
|
||||
return [tab["label"] for tab in self._state.tabs.values()]
|
||||
def _get_tab_list(self):
|
||||
return [self._state.tabs[tab_id] for tab_id in self._state.tabs_order if tab_id in self._state.tabs]
|
||||
|
||||
def update_boundaries(self):
|
||||
return Script(f"updateBoundaries('{self._id}');")
|
||||
|
||||
Reference in New Issue
Block a user