Documentation
¶
Overview ¶
Package modeladmin provides a generic, Django-style ModelAdmin for auto-generating CRUD admin views from Den documents.
Index ¶
- func ColumnValue(item any, field string) template.HTML
- func ColumnValueFunc(t func(string) string, computed map[string]func(any) template.HTML) func(any, string) template.HTML
- func FieldValue(item any, field string) any
- func RegisterTableDisplayName(table, displayName string)
- type ActiveChoice
- type ActiveFilter
- type BulkAction
- type CascadeImpact
- type ChoicesFunc
- type DeleteItem
- type FilterDef
- type ItemActions
- type ModelAdmin
- func (ma *ModelAdmin[T]) HandleBulkAction(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleConfirmDelete(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleCreate(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleDelete(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleDetail(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleExportCSV(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleExportJSON(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleList(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleNew(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) HandleUpdate(w http.ResponseWriter, r *http.Request) error
- func (ma *ModelAdmin[T]) Init()
- func (ma *ModelAdmin[T]) Routes(r chi.Router)
- type RenderAction
- type RenderBulkAction
- type RenderConfig
- type Renderer
- type RowAction
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ColumnValue ¶
ColumnValue extracts a display value for a list column from an item.
func ColumnValueFunc ¶
func ColumnValueFunc(t func(string) string, computed map[string]func(any) template.HTML) func(any, string) template.HTML
ColumnValueFunc returns a columnValue function that uses the given translator and computed column functions.
func FieldValue ¶
FieldValue extracts a field value from a struct by field name. Returns the value as any, or nil if the field is not found.
func RegisterTableDisplayName ¶ added in v0.5.0
func RegisterTableDisplayName(table, displayName string)
RegisterTableDisplayName records a collection → display name mapping. This is called automatically by Init() for each ModelAdmin, but can also be called manually for collections that don't have their own ModelAdmin.
Types ¶
type ActiveChoice ¶
type ActiveChoice struct {
Value string
Label string
URL string // pre-built URL with this filter applied
IsActive bool
}
ActiveChoice represents a single filter option with its computed URL.
type ActiveFilter ¶
type ActiveFilter struct {
Field string
Label string
Choices []ActiveChoice
HasActive bool // true if any choice is selected
}
ActiveFilter holds filter state for rendering in the list template.
type BulkAction ¶ added in v0.5.0
type BulkAction struct {
Slug string // URL segment: /admin/{model}/bulk/{slug}
Label string // button text (i18n key)
Confirm string // JS confirm() text (i18n key); empty = no confirm
ConfirmPage bool // if true, redirect to confirm page instead of JS confirm()
Handler func(ctx context.Context, db *den.DB, ids []string) error
}
BulkAction defines a bulk operation on multiple selected items.
func DeleteBulkAction ¶ added in v0.5.0
func DeleteBulkAction[T any]() BulkAction
DeleteBulkAction returns a BulkAction that deletes selected items by ID. It uses ConfirmPage to redirect to the unified confirm-delete page instead of a JS confirm() dialog.
type CascadeImpact ¶ added in v0.5.0
type CascadeImpact struct {
Table string // collection name
DisplayName string // human-readable name
Count int
}
CascadeImpact holds the count of rows that will be cascade-deleted in a child table.
type ChoicesFunc ¶ added in v0.3.0
ChoicesFunc returns dynamic choices for a select field, typically loaded from the database.
type DeleteItem ¶ added in v0.6.0
type DeleteItem struct {
ID string
Label string
Impacts []CascadeImpact
}
DeleteItem holds per-item information for the delete confirmation page.
type FilterDef ¶
type FilterDef struct {
Field string // JSON field name used in Den queries
Label string // human-readable label
LabelKey string // i18n key for the label; translated via i18n.T at request time
Type string // "select", "bool", "date_range"
Choices []forms.Choice // for select filters
}
FilterDef describes a filter available in the admin list view.
type ItemActions ¶
type ItemActions struct {
Actions []RenderAction
}
ItemActions holds the actions available for a specific item.
type ModelAdmin ¶
type ModelAdmin[T any] struct { // Slug is the URL path segment, e.g. "articles". Slug string // DisplayName is the singular human-readable name, also used as i18n key, e.g. "Article". DisplayName string // DisplayPluralName is the plural human-readable name, also used as i18n key, e.g. "Articles". DisplayPluralName string // DB is the Den database connection. DB *den.DB // Renderer renders list, detail, and form views. Renderer Renderer[T] // IDFunc extracts the primary key from the request URL. // Defaults to chi.URLParam(r, "id"). IDFunc func(*http.Request) string // CanCreate enables the create action. Default: false. CanCreate bool // CanEdit enables the update action. Default: false. CanEdit bool // CanDelete enables the delete action. Default: false. CanDelete bool // ListFields lists struct field names to show in the list view. ListFields []string // OrderBy is the default sort, e.g. "created_at DESC". OrderBy string // PageSize is the number of items per page. Default: 20. PageSize int // SearchFields lists JSON field names to search across (RegExp-based). SearchFields []string // Filters defines the sidebar filters for the list view. Filters []FilterDef // SortFields lists JSON field names that support column sorting. SortFields []string // RowActions defines custom per-row actions for the list/detail views. RowActions []RowAction // FieldChoices provides dynamic choices for form select fields. // Key is the Go struct field name, value is a function that returns choices // (typically loaded from the database). Fields with FieldChoices are // rendered as <select> dropdowns instead of text/number inputs. FieldChoices map[string]ChoicesFunc // EmptyMessage is shown when the list has no items. Default: "No items found." EmptyMessage string // EmptyMessageKey is the i18n key for the empty-list message. // Translated via i18n.T at request time. EmptyMessageKey string // ReadOnlyFields lists struct field names (by Go name) to render as // plain text in forms. Read-only fields cannot be modified by the user; // their values are preserved from the model instance. ReadOnlyFields []string // CanExport enables CSV/JSON export of the list view. Default: false. CanExport bool // FormOptions holds additional forms.Option[T] applied when building // create/edit forms. Use this to pass WithCleanFunc or other options // that need external dependencies captured at configuration time. FormOptions []forms.Option[T] // BulkActions defines bulk operations on multiple selected items. BulkActions []BulkAction // ListDisplay defines computed columns for the list view. // Keys are column names (which can also appear in ListFields). // The function receives an item and returns pre-rendered HTML. ListDisplay map[string]func(T) template.HTML }
ModelAdmin provides generic CRUD admin views for a Den document. It is not a burrow.App itself — it's a helper that apps embed to delegate admin route handling.
func (*ModelAdmin[T]) HandleBulkAction ¶ added in v0.5.0
func (ma *ModelAdmin[T]) HandleBulkAction(w http.ResponseWriter, r *http.Request) error
HandleBulkAction processes a bulk action on selected items. Actions with ConfirmPage=true are redirected to HandleConfirmDelete instead.
func (*ModelAdmin[T]) HandleConfirmDelete ¶ added in v0.5.0
func (ma *ModelAdmin[T]) HandleConfirmDelete(w http.ResponseWriter, r *http.Request) error
HandleConfirmDelete renders the unified delete confirmation page for one or more items. It reads item IDs from the _selected query parameter (GET request, reload-safe).
func (*ModelAdmin[T]) HandleCreate ¶
func (ma *ModelAdmin[T]) HandleCreate(w http.ResponseWriter, r *http.Request) error
HandleCreate processes the create form submission. Exported so apps can mount ModelAdmin create alongside custom handlers.
func (*ModelAdmin[T]) HandleDelete ¶
func (ma *ModelAdmin[T]) HandleDelete(w http.ResponseWriter, r *http.Request) error
HandleDelete deletes one or more items by ID. It reads item IDs from the _selected form parameter.
func (*ModelAdmin[T]) HandleDetail ¶
func (ma *ModelAdmin[T]) HandleDetail(w http.ResponseWriter, r *http.Request) error
HandleDetail renders the detail/edit form for an existing item. Exported so apps can mount ModelAdmin detail views alongside custom handlers.
func (*ModelAdmin[T]) HandleExportCSV ¶ added in v0.5.0
func (ma *ModelAdmin[T]) HandleExportCSV(w http.ResponseWriter, r *http.Request) error
HandleExportCSV streams the filtered list as a CSV download.
func (*ModelAdmin[T]) HandleExportJSON ¶ added in v0.5.0
func (ma *ModelAdmin[T]) HandleExportJSON(w http.ResponseWriter, r *http.Request) error
HandleExportJSON writes the filtered list as a JSON array download.
func (*ModelAdmin[T]) HandleList ¶
func (ma *ModelAdmin[T]) HandleList(w http.ResponseWriter, r *http.Request) error
HandleList renders the paginated list view. Exported so apps can mount ModelAdmin list views alongside custom handlers.
func (*ModelAdmin[T]) HandleNew ¶
func (ma *ModelAdmin[T]) HandleNew(w http.ResponseWriter, r *http.Request) error
HandleNew renders the create form. Exported so apps can mount ModelAdmin form views alongside custom handlers.
func (*ModelAdmin[T]) HandleUpdate ¶
func (ma *ModelAdmin[T]) HandleUpdate(w http.ResponseWriter, r *http.Request) error
HandleUpdate processes the edit form submission. Exported so apps can mount ModelAdmin update alongside custom handlers.
func (*ModelAdmin[T]) Init ¶ added in v0.5.0
func (ma *ModelAdmin[T]) Init()
Init runs boot-time setup for this ModelAdmin. Called automatically by Routes(). Call manually when registering routes without Routes().
func (*ModelAdmin[T]) Routes ¶
func (ma *ModelAdmin[T]) Routes(r chi.Router)
Routes mounts all CRUD routes for this ModelAdmin on the given router. Routes are mounted under /{slug} so the caller should mount this within the /admin route group.
type RenderAction ¶
type RenderAction struct {
Slug string
Label string
Icon template.HTML
Method string
Class string
Confirm string
}
RenderAction holds action metadata for template rendering (no handler/ShowWhen).
type RenderBulkAction ¶ added in v0.5.0
RenderBulkAction holds bulk-action metadata for template rendering (no handler).
type RenderConfig ¶
type RenderConfig struct {
Slug string
DisplayName string
DisplayPluralName string
CanCreate bool
CanEdit bool
CanDelete bool
CanExport bool
ListFields []string // Go struct field names (for columnValue/fieldValue lookups)
ListFieldLabels []string // translated column headers (parallel to ListFields)
IDField string // struct field name for the primary key (default: "ID")
Filters []ActiveFilter
RowActions []RenderAction
HasRowActions bool
ItemActionSets [][]RenderAction // per-item action sets, parallel to items (ShowWhen-evaluated)
BulkActions []RenderBulkAction
HasBulkActions bool
HasSearch bool
EmptyMessage string
ComputedColumns map[string]func(any) template.HTML // field → render function
}
RenderConfig holds display metadata passed to the renderer.
type Renderer ¶
type Renderer[T any] interface { List(w http.ResponseWriter, r *http.Request, items []T, page burrow.PageResult, cfg RenderConfig) error Detail(w http.ResponseWriter, r *http.Request, item *T, cfg RenderConfig) error Form(w http.ResponseWriter, r *http.Request, item *T, fields []forms.BoundField, cfg RenderConfig) error ConfirmDelete(w http.ResponseWriter, r *http.Request, items []DeleteItem, cfg RenderConfig) error }
Renderer defines how ModelAdmin views are rendered.
type RowAction ¶
type RowAction struct {
Slug string // URL segment: /admin/{model}/{id}/{slug}
Label string // button text
Icon template.HTML // icon HTML (optional)
Method string // "POST" or "DELETE" (default: "POST")
Class string // CSS class (default: "btn-outline-secondary")
Confirm string // hx-confirm text (empty = no confirm)
Handler burrow.HandlerFunc // the actual handler
ShowWhen func(item any) bool // nil = always show
}
RowAction defines a custom per-row action in the admin list/detail views.