From e24f9e0f793315ce0b9e7d19df27f8091e3b8922 Mon Sep 17 00:00:00 2001 From: Alexander Kalinovsky Date: Wed, 5 Feb 2025 19:00:29 +0100 Subject: [PATCH] add InlineButton to forms --- __init__.py | 1 + bot/handlers/forms/entity_form.py | 9 ++++++++- model/descriptors.py | 10 ++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/__init__.py b/__init__.py index 090ddb7..9fd3338 100644 --- a/__init__.py +++ b/__init__.py @@ -16,4 +16,5 @@ from .model.descriptors import ( CommandCallbackContext as CommandCallbackContext, CommandButton as CommandButton, FieldEditButton as FieldEditButton, + InlineButton as InlineButton, ) diff --git a/bot/handlers/forms/entity_form.py b/bot/handlers/forms/entity_form.py index 2aec8f0..4bb76ca 100644 --- a/bot/handlers/forms/entity_form.py +++ b/bot/handlers/forms/entity_form.py @@ -6,7 +6,7 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder from logging import getLogger from sqlmodel.ext.asyncio.session import AsyncSession -from ....model.descriptors import FieldEditButton, CommandButton +from ....model.descriptors import FieldEditButton, CommandButton, InlineButton from ....model.settings import Settings from ....model.user import UserBase from ....model import EntityPermission @@ -165,6 +165,13 @@ async def entity_item( ) ) + elif isinstance(button, InlineButton): + + if isinstance(button.inline_button, InlineKeyboardButton): + btn_row.append(button.inline_button) + elif callable(button.inline_button): + btn_row.append(button.inline_button(entity_item)) + if btn_row: keyboard_builder.row(*btn_row) diff --git a/model/descriptors.py b/model/descriptors.py index fd7fa00..df369de 100644 --- a/model/descriptors.py +++ b/model/descriptors.py @@ -1,4 +1,4 @@ -from aiogram.types import Message, CallbackQuery +from aiogram.types import Message, CallbackQuery, InlineKeyboardButton from aiogram.fsm.context import FSMContext from aiogram.utils.i18n import I18n from aiogram.utils.keyboard import InlineKeyboardBuilder @@ -35,6 +35,12 @@ class CommandButton: visibility: Callable[[Any], bool] | None = None +@dataclass +class InlineButton: + inline_button: InlineKeyboardButton | Callable[[Any], InlineKeyboardButton] + visibility: Callable[[Any], bool] | None = None + + @dataclass class Filter: field_name: str @@ -74,7 +80,7 @@ class EntityList: class EntityForm: item_repr: EntityItemCaptionCallable | None = None edit_field_sequence: list[str] = None - form_buttons: list[list[FieldEditButton | CommandButton]] = None + form_buttons: list[list[FieldEditButton | CommandButton | InlineButton]] = None show_edit_button: bool = True show_delete_button: bool = True