add InlineButton to forms

This commit is contained in:
Alexander Kalinovsky
2025-02-05 19:00:29 +01:00
parent 873e74f1ba
commit e24f9e0f79
3 changed files with 17 additions and 3 deletions

View File

@@ -16,4 +16,5 @@ from .model.descriptors import (
CommandCallbackContext as CommandCallbackContext, CommandCallbackContext as CommandCallbackContext,
CommandButton as CommandButton, CommandButton as CommandButton,
FieldEditButton as FieldEditButton, FieldEditButton as FieldEditButton,
InlineButton as InlineButton,
) )

View File

@@ -6,7 +6,7 @@ from aiogram.utils.keyboard import InlineKeyboardBuilder
from logging import getLogger from logging import getLogger
from sqlmodel.ext.asyncio.session import AsyncSession 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.settings import Settings
from ....model.user import UserBase from ....model.user import UserBase
from ....model import EntityPermission 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: if btn_row:
keyboard_builder.row(*btn_row) keyboard_builder.row(*btn_row)

View File

@@ -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.fsm.context import FSMContext
from aiogram.utils.i18n import I18n from aiogram.utils.i18n import I18n
from aiogram.utils.keyboard import InlineKeyboardBuilder from aiogram.utils.keyboard import InlineKeyboardBuilder
@@ -35,6 +35,12 @@ class CommandButton:
visibility: Callable[[Any], bool] | None = None visibility: Callable[[Any], bool] | None = None
@dataclass
class InlineButton:
inline_button: InlineKeyboardButton | Callable[[Any], InlineKeyboardButton]
visibility: Callable[[Any], bool] | None = None
@dataclass @dataclass
class Filter: class Filter:
field_name: str field_name: str
@@ -74,7 +80,7 @@ class EntityList:
class EntityForm: class EntityForm:
item_repr: EntityItemCaptionCallable | None = None item_repr: EntityItemCaptionCallable | None = None
edit_field_sequence: list[str] = 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_edit_button: bool = True
show_delete_button: bool = True show_delete_button: bool = True