Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion docs/faq.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
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"],
)
34 changes: 27 additions & 7 deletions example/scrolls.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
}


Expand Down Expand Up @@ -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(
Expand All @@ -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(
Expand Down