new shems
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import base64
|
||||
import flet as ft
|
||||
import designer as ds
|
||||
import api_client
|
||||
from radar_chart import RadarChart
|
||||
|
||||
|
||||
class PollPage(ft.Column):
|
||||
@@ -157,27 +159,80 @@ class PollPage(ft.Column):
|
||||
self._error_text.update()
|
||||
else:
|
||||
url_key = self._page.session.store.get("url_key") or ""
|
||||
# Заменяем контент на сообщение об успехе
|
||||
|
||||
# Показываем лоадер пока грузим радар
|
||||
self.controls = [
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[ft.ProgressRing(width=40, height=40, color=ds.clolors.laer1)],
|
||||
)
|
||||
]
|
||||
self.update()
|
||||
|
||||
radar = await api_client.get_radar_result(response_id)
|
||||
|
||||
success_controls: list[ft.Control] = [
|
||||
ft.Icon(ft.Icons.CHECK_CIRCLE_OUTLINE, size=48, color=ds.clolors.laer1),
|
||||
ds.CastomText(text="Тест пройден!", size=20, weight=ft.FontWeight.BOLD),
|
||||
]
|
||||
|
||||
if radar and radar.get("items"):
|
||||
items = sorted(
|
||||
radar["items"],
|
||||
key=lambda x: (
|
||||
x.get("dimension_position") is None,
|
||||
x.get("dimension_position", 0),
|
||||
),
|
||||
)
|
||||
actual_max = max((it["value"] for it in items), default=1.0)
|
||||
max_val = max(actual_max, 14.0)
|
||||
|
||||
success_controls.append(
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[RadarChart(items, max_val)],
|
||||
)
|
||||
)
|
||||
|
||||
async def _download(_evt, _rid=response_id):
|
||||
svg_bytes = await api_client.get_radar_svg_bytes(_rid)
|
||||
if svg_bytes:
|
||||
b64 = base64.b64encode(svg_bytes).decode()
|
||||
uri = f"data:image/svg+xml;base64,{b64}"
|
||||
self._page.launch_url(uri, web_window_name="_blank")
|
||||
|
||||
success_controls.append(
|
||||
ft.Row(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
controls=[
|
||||
ft.ElevatedButton(
|
||||
text="Сохранить диаграмму",
|
||||
icon=ft.Icons.DOWNLOAD,
|
||||
on_click=_download,
|
||||
style=ft.ButtonStyle(
|
||||
color=ds.clolors.ferst,
|
||||
bgcolor=ds.clolors.laer2,
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
)
|
||||
|
||||
success_controls.append(
|
||||
ds.CastomButton(
|
||||
text="Вернуться к тестам",
|
||||
on_click=lambda _: self._page.go(f"/take_test/{url_key}"),
|
||||
)
|
||||
)
|
||||
|
||||
self.controls = [
|
||||
ft.Container(
|
||||
alignment=ft.Alignment(0, 0),
|
||||
padding=40,
|
||||
padding=20,
|
||||
content=ft.Column(
|
||||
alignment=ft.MainAxisAlignment.CENTER,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
spacing=16,
|
||||
controls=[
|
||||
ft.Icon(ft.Icons.CHECK_CIRCLE_OUTLINE, size=64, color=ds.clolors.laer1),
|
||||
ds.CastomText(
|
||||
text="Ответы отправлены!",
|
||||
size=20,
|
||||
weight=ft.FontWeight.BOLD,
|
||||
),
|
||||
ds.CastomButton(
|
||||
text="Вернуться к тестам",
|
||||
on_click=lambda _: self._page.go(f"/take_test/{url_key}"),
|
||||
),
|
||||
],
|
||||
controls=success_controls,
|
||||
),
|
||||
)
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user