fix(stats): Detect finished UI on submit.

This commit is contained in:
2023-09-09 14:24:52 +03:00
parent bae948b65a
commit c7cf34d38f
2 changed files with 20 additions and 6 deletions

View File

@@ -483,12 +483,16 @@ class WeeklyMonthlyUI(StatsUI):
).with_connection(conn)
if modified:
# Check whether the UI finished while we were interacting
if not self._stopped.done():
# If either goal type was modified, clear the rendered cache and refresh
for page_key, (goalf, statf) in self._card_cache.items():
# If the stat period type is the same as the current period type
if page_key[2].period is self._stat_page.period:
self._card_cache[page_key] = (None, statf)
await self.refresh(thinking=interaction)
else:
await interaction.delete_original_response()
await press.response.send_modal(modal)
async def edit_button_refresh(self):

View File

@@ -48,6 +48,16 @@ class LeoUI(View):
# TODO: Replace this with a substitutable ViewLayout class
self._layout: Optional[tuple[tuple[Item, ...], ...]] = None
@property
def _stopped(self) -> asyncio.Future:
"""
Return an future indicating whether the View has finished interacting.
Currently exposes a hidden attribute of the underlying View.
May be reimplemented in future.
"""
return self._View__stopped
def to_components(self) -> List[Dict[str, Any]]:
"""
Extending component generator to apply the set _layout, if it exists.