From eaa37a074532f73d455c8b807abf6b1f112d6b6e Mon Sep 17 00:00:00 2001 From: mikestefanello <552328+mikestefanello@users.noreply.github.com> Date: Sat, 12 Apr 2025 10:04:15 -0400 Subject: [PATCH] Expanded entity form support. --- pkg/ui/components/form.go | 28 ++++++++++++++++++++++ pkg/ui/pages/entity.go | 50 +++++++++++++++++---------------------- 2 files changed, 50 insertions(+), 28 deletions(-) diff --git a/pkg/ui/components/form.go b/pkg/ui/components/form.go index 1dbc38b..5ac5e1e 100644 --- a/pkg/ui/components/form.go +++ b/pkg/ui/components/form.go @@ -41,6 +41,14 @@ type ( Value string Help string } + + CheckboxParams struct { + Form form.Form + FormField string + Name string + Label string + Checked bool + } ) func ControlGroup(controls ...Node) Node { @@ -106,6 +114,26 @@ func Radios(el RadiosParams) Node { ) } +func Checkbox(el CheckboxParams) Node { + return Div( + Class("field"), + Div( + Class("control"), + Label( + Class("checkbox"), + Input( + Type("checkbox"), + Name(el.Name), + If(el.Checked, Checked()), + Value("true"), + ), + Text(" "+el.Label), + ), + ), + formFieldErrors(el.Form, el.FormField), + ) +} + func InputField(el InputFieldParams) Node { return Div( Class("field"), diff --git a/pkg/ui/pages/entity.go b/pkg/ui/pages/entity.go index 8f96db3..8ef9add 100644 --- a/pkg/ui/pages/entity.go +++ b/pkg/ui/pages/entity.go @@ -24,6 +24,8 @@ import ( func AdminEntityDelete(ctx echo.Context, entityTypeName string) error { r := ui.NewRequest(ctx) + r.Title = fmt.Sprintf("Delete %s", entityTypeName) + form := Form( Method(http.MethodPost), H2(Textf("Are you sure you want to delete this %s?", entityTypeName)), @@ -39,7 +41,7 @@ func AdminEntityDelete(ctx echo.Context, entityTypeName string) error { func AdminEntityForm(ctx echo.Context, schema *load.Schema, values url.Values) error { r := ui.NewRequest(ctx) - r.Title = fmt.Sprintf("Add %s", schema.Name) // TODO + r.Title = fmt.Sprintf("Add %s", schema.Name) nodes := make(Group, 0) label := func(name string) string { @@ -83,7 +85,8 @@ func AdminEntityForm(ctx echo.Context, schema *load.Schema, values url.Values) e Help: fmt.Sprintf("Use the following format: %s", time.Now().Format(time.RFC3339)), Value: getValue(f.Name), })) - case field.TypeInt: + case field.TypeInt, field.TypeInt8, field.TypeInt16, field.TypeInt32, + field.TypeInt64, field.TypeFloat32, field.TypeFloat64: nodes = append(nodes, InputField(InputFieldParams{ Name: f.Name, InputType: "number", @@ -91,29 +94,18 @@ func AdminEntityForm(ctx echo.Context, schema *load.Schema, values url.Values) e Value: getValue(f.Name), })) case field.TypeBool: - // TODO - nodes = append(nodes, P(Textf("%s not supported", f.Name))) + nodes = append(nodes, Checkbox(CheckboxParams{ + Name: f.Name, + Label: label(f.Name), + })) case field.TypeEnum: // TODO nodes = append(nodes, P(Textf("%s not supported", f.Name))) - // case numeric TODO default: nodes = append(nodes, P(Textf("%s not supported", f.Name))) } } - //for _, e := range schema.Edges { - // if e.Inverse { - // continue - // } - // nodes = append(nodes, InputField(InputFieldParams{ - // Name: e.Name, - // InputType: "number", - // Label: label(e.Name), - // Value: getValue(e.Name), // TODO load does not load this - // })) - //} - nodes = append(nodes, ControlGroup( FormButton("is-primary", "Submit"), ButtonLink(r.Path(routenames.AdminEntityList(schema.Name)), "is-secondary", "Cancel"), @@ -131,11 +123,6 @@ type AdminEntityListParams struct { Pager pager.Pager } -type AdminEntityListRow struct { - ID int - Columns []string -} - func AdminEntityList(ctx echo.Context, params AdminEntityListParams) error { r := ui.NewRequest(ctx) r.Title = params.EntityType.Name @@ -183,11 +170,18 @@ func AdminEntityList(ctx echo.Context, params AdminEntityListParams) error { } // TODO pager - return r.Render(layouts.Admin, Table( - Class("table"), - THead( - Tr(genHeader()), + return r.Render(layouts.Admin, Group{ + ButtonLink( + r.Path(routenames.AdminEntityAdd(params.EntityType.Name)), + "is-link", + fmt.Sprintf("Add %s", params.EntityType.Name), ), - TBody(genRows()), - )) + Table( + Class("table"), + THead( + Tr(genHeader()), + ), + TBody(genRows()), + ), + }) }