diff --git a/docs/faq.rst b/docs/faq.rst index f5d4a9c9..0168114e 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -76,4 +76,24 @@ How can I pass data between dialogs? Input - pass via ``dialog_manager.start(..., data="here")``, read using ``dialog_manager.start_data``. Output - pass via ``dialog_manager.done(result="here")``, read as a parameter to ``on_process_result`` of parent dialog -More details: :ref:`start-dialog`, :ref:`close-dialog`. \ No newline at end of file +More details: :ref:`start-dialog`, :ref:`close-dialog`. + + +How can I can use "when" condition in pager widget? +======================================================== + +Pager widgets like ListGroup, PrevPage, NextPage, etc. use separate data, unlike other widgets like Button, Select. +To use pass some information from the original data, which our getter returns - you need to use magic_filter to first access data and then the key of the desired data. +For example + +.. code-block:: python + from aiogram_dialog.widgets.kbd import NextPage + from aiogram_dialog.widgets.text import Const + from magic_filter import F + + + next_page = NextPage( + text=Const("Next page"), + scroll="some_scroll", + when=F["data"]["show_next_page"], + ) \ No newline at end of file diff --git a/example/scrolls.py b/example/scrolls.py index d6e7bf95..1f35eda8 100644 --- a/example/scrolls.py +++ b/example/scrolls.py @@ -9,6 +9,7 @@ from aiogram.fsm.state import State, StatesGroup from aiogram.fsm.storage.memory import MemoryStorage from aiogram.types import Message +from magic_filter import F from aiogram_dialog import ( Dialog, @@ -76,6 +77,8 @@ class DialogSG(StatesGroup): async def product_getter(**_kwargs): return { "products": [(f"Product {i}", i) for i in range(1, 30)], + "show_hidden_prev_page": False, + "show_hidden_next_page": False, } @@ -126,7 +129,7 @@ async def paging_getter(dialog_manager: DialogManager, **_kwargs): Const("Scrolling group with external paging controls"), NumberedPager( scroll="scroll_no_pager", - page_text=Format("{target_page1}\uFE0F\u20E3"), + page_text=Format("{target_page1}\ufe0f\u20e3"), current_page_text=Format("{current_page1}"), ), NumberedPager( @@ -146,21 +149,38 @@ async def paging_getter(dialog_manager: DialogManager, **_kwargs): id="scroll_no_pager", ), Row( - FirstPage( - scroll="scroll_no_pager", text=Format("⏮️ {target_page1}"), + scroll="scroll_no_pager", + text=Format("⏮️ {target_page1}"), ), PrevPage( - scroll="scroll_no_pager", text=Format("◀️"), + scroll="scroll_no_pager", + text=Format("◀️"), ), CurrentPage( - scroll="scroll_no_pager", text=Format("{current_page1}"), + scroll="scroll_no_pager", + text=Format("{current_page1}"), ), NextPage( - scroll="scroll_no_pager", text=Format("▶️"), + scroll="scroll_no_pager", + text=Format("▶️"), ), LastPage( - scroll="scroll_no_pager", text=Format("{target_page1} ⏭️"), + scroll="scroll_no_pager", + text=Format("{target_page1} ⏭️"), + ), + ), + # example of using data from getter in pager widgets + Row( + PrevPage( + text=Const("Hidden prev page"), + scroll="scroll_no_pager", + when=F["data"]["show_hidden_prev_page"], + ), + NextPage( + text=Const("Hidden next page"), + scroll="scroll_no_pager", + when=F["data"]["show_hidden_next_page"], ), ), Row(