121 lines
4.8 KiB
Python
121 lines
4.8 KiB
Python
from aiogram.types import InlineKeyboardButton
|
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
|
|
|
from ..context import ContextData, CallbackCommand
|
|
|
|
|
|
def add_pagination_controls(
|
|
keyboard_builder: InlineKeyboardBuilder,
|
|
callback_data: ContextData,
|
|
total_pages: int,
|
|
command: CallbackCommand,
|
|
page: int,
|
|
):
|
|
if total_pages > 1:
|
|
navigation_buttons = []
|
|
ContextData(**callback_data.model_dump()).__setattr__
|
|
if total_pages > 10:
|
|
navigation_buttons.append(
|
|
InlineKeyboardButton(
|
|
text="⏮️",
|
|
callback_data=ContextData(
|
|
command=command,
|
|
context=callback_data.context,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
field_name=callback_data.field_name,
|
|
form_params=callback_data.form_params,
|
|
user_command=callback_data.user_command,
|
|
data="1" if page != 1 else "skip",
|
|
).pack(),
|
|
)
|
|
)
|
|
navigation_buttons.append(
|
|
InlineKeyboardButton(
|
|
text="⏪️",
|
|
callback_data=ContextData(
|
|
command=command,
|
|
context=callback_data.context,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
field_name=callback_data.field_name,
|
|
form_params=callback_data.form_params,
|
|
user_command=callback_data.user_command,
|
|
data=str(max(page - 10, 1)) if page > 1 else "skip",
|
|
).pack(),
|
|
)
|
|
)
|
|
|
|
navigation_buttons.append(
|
|
InlineKeyboardButton(
|
|
text="◀️",
|
|
callback_data=ContextData(
|
|
command=command,
|
|
context=callback_data.context,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
field_name=callback_data.field_name,
|
|
form_params=callback_data.form_params,
|
|
user_command=callback_data.user_command,
|
|
data=str(max(page - 1, 1)) if page > 1 else "skip",
|
|
).pack(),
|
|
)
|
|
)
|
|
navigation_buttons.append(
|
|
InlineKeyboardButton(
|
|
text="▶️",
|
|
callback_data=ContextData(
|
|
command=command,
|
|
context=callback_data.context,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
field_name=callback_data.field_name,
|
|
form_params=callback_data.form_params,
|
|
user_command=callback_data.user_command,
|
|
data=(
|
|
str(min(page + 1, total_pages))
|
|
if page < total_pages
|
|
else "skip"
|
|
),
|
|
).pack(),
|
|
)
|
|
)
|
|
|
|
if total_pages > 10:
|
|
navigation_buttons.append(
|
|
InlineKeyboardButton(
|
|
text="⏩️",
|
|
callback_data=ContextData(
|
|
command=command,
|
|
context=callback_data.context,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
field_name=callback_data.field_name,
|
|
form_params=callback_data.form_params,
|
|
user_command=callback_data.user_command,
|
|
data=(
|
|
str(min(page + 10, total_pages))
|
|
if page < total_pages
|
|
else "skip"
|
|
),
|
|
).pack(),
|
|
)
|
|
)
|
|
navigation_buttons.append(
|
|
InlineKeyboardButton(
|
|
text="⏭️",
|
|
callback_data=ContextData(
|
|
command=command,
|
|
context=callback_data.context,
|
|
entity_name=callback_data.entity_name,
|
|
entity_id=callback_data.entity_id,
|
|
field_name=callback_data.field_name,
|
|
form_params=callback_data.form_params,
|
|
user_command=callback_data.user_command,
|
|
data=str(total_pages) if page != total_pages else "skip",
|
|
).pack(),
|
|
)
|
|
)
|
|
|
|
keyboard_builder.row(*navigation_buttons)
|