create event
This commit is contained in:
@@ -1,39 +1,34 @@
|
||||
from aiogram_dialog import Dialog, Window
|
||||
from aiogram_dialog.widgets.kbd import Back, Cancel, Column, Select
|
||||
from aiogram_dialog.widgets.text import Const, Format
|
||||
from aiogram_dialog.widgets.text import Const, Format, Jinja
|
||||
|
||||
from .getters import events_getter
|
||||
from app.bot.dialogs.templates import event_template
|
||||
|
||||
from .getters import event_getter, events_list_getter
|
||||
from .handlers import on_event_selected
|
||||
from .states import EventsSG
|
||||
|
||||
|
||||
async def on_event_selected(
|
||||
c,
|
||||
widget: Select,
|
||||
manager,
|
||||
item_id: str,
|
||||
):
|
||||
manager.dialog_data["selected_event"] = item_id
|
||||
await manager.next()
|
||||
|
||||
events_dialog = Dialog(
|
||||
Window(
|
||||
Const("События"),
|
||||
Column(
|
||||
Cancel(Const("Назад")),
|
||||
Select(
|
||||
Format("{item}"),
|
||||
Format("{item[title]}"),
|
||||
id="categ",
|
||||
item_id_getter=lambda x: x,
|
||||
item_id_getter=lambda x: x["id"],
|
||||
items="events",
|
||||
on_click=on_event_selected,
|
||||
),
|
||||
),
|
||||
getter=events_getter,
|
||||
getter=events_list_getter,
|
||||
state=EventsSG.events_list,
|
||||
),
|
||||
Window(
|
||||
Format("{dialog_data[selected_event]}"),
|
||||
Jinja(event_template),
|
||||
Back(Const("Назад")),
|
||||
getter=event_getter,
|
||||
parse_mode="HTML",
|
||||
state=EventsSG.event,
|
||||
),
|
||||
)
|
||||
|
||||
@@ -1,6 +1,22 @@
|
||||
from aiogram.types import User
|
||||
from aiogram_dialog import DialogManager
|
||||
|
||||
from app.infrastructure.database.crud import get_event_by_id, get_events_list
|
||||
|
||||
async def events_getter(dialog_manager: DialogManager, event_from_user: User, **kwargs) -> dict[str, str]:
|
||||
return {"events": ["ev1", "ev2", "ev3"]}
|
||||
|
||||
async def events_list_getter(
|
||||
dialog_manager: DialogManager, event_from_user: User, **kwargs
|
||||
) -> dict[str, str]:
|
||||
events = await get_events_list(dialog_manager.middleware_data["session"])
|
||||
return {"events": [{"title": event.title, "id": event.id} for event in events]}
|
||||
|
||||
|
||||
async def event_getter(
|
||||
dialog_manager: DialogManager, **kwargs
|
||||
) -> dict[str, str]:
|
||||
return {
|
||||
"event_obj": await get_event_by_id(
|
||||
dialog_manager.middleware_data["session"],
|
||||
int(dialog_manager.dialog_data["selected_event"]),
|
||||
)
|
||||
}
|
||||
|
||||
13
app/bot/dialogs/flows/events/handlers.py
Normal file
13
app/bot/dialogs/flows/events/handlers.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from aiogram.types import CallbackQuery
|
||||
from aiogram_dialog import DialogManager
|
||||
from aiogram_dialog.widgets.kbd import Select
|
||||
|
||||
|
||||
async def on_event_selected(
|
||||
callback: CallbackQuery,
|
||||
widget: Select,
|
||||
manager: DialogManager,
|
||||
item_id: str,
|
||||
):
|
||||
manager.dialog_data["selected_event"] = item_id
|
||||
await manager.next()
|
||||
Reference in New Issue
Block a user