Coverage for src/lexigram/admin/actions/standard/header.py: 100%
14 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:56 +0800
1"""Header actions (create).
3Part of the ``lexigram.admin.actions.standard`` package.
4"""
6from __future__ import annotations
8from typing import Any
10from lexigram.admin.actions.base import HeaderAction
11from lexigram.admin.actions.exceptions import ActionError
12from lexigram.admin.actions.types import (
13 ActionColor,
14 ActionContext,
15 ConfirmationConfig,
16)
17from lexigram.ui import Zones
18from lexigram.result import Err, Ok, Result
19class CreateAction(HeaderAction):
20 """Create a new record."""
22 def __init__(
23 self,
24 name: str = "create",
25 label: str | None = None,
26 ) -> None:
27 super().__init__(
28 name=name,
29 label=label or "Create",
30 icon="plus",
31 color=ActionColor.PRIMARY,
32 )
34 def _get_htmx_attrs(
35 self, url: str, record: None, ctx: ActionContext
36 ) -> dict[str, str]:
37 return {
38 "hx-get": url,
39 "hx-target": Zones.SLIDE_OVER.selector,
40 "hx-swap": Zones.SLIDE_OVER.swap_mode.value,
41 }
43 async def execute(self, record: None, ctx: ActionContext) -> Result[Any, Any]:
44 return Ok({"message": "Created new record"})