feat(10-03): open, edit and save a record with toast and 422 feedback
- The SPA loads the backend::lang bundle before /auth/me, sets the document language from meta.locale and renders plural messages with Intl.PluralRules; interpolate mirrors phrasebook for :name/:Name/:NAME - Create and record routes; mapWinterUrl maps recordUrl and redirects onto the controller's list, create and record routes only - List rows open their record; FormView loads the form schema and the record, shows context-allowed fields in the span grid, saves values keyed by field name and toasts the resolved saved message - A 422 puts each message under its field (aria-invalid, aria-describedby), shows the plural banner, focuses the first invalid field in schema order and clears a field's error on change - The D-05 registry maps text, textarea, number and dropdown; any other type renders the unsupported-field box with the type in DM Mono - The admin OpenAPI document declares the write request bodies (AdminRecord, AdminIDsRequest) and the list filter query as a deepObject, so the typed client can send them - New backend::lang form.load_failed key; boardwalk/dist rebuilt
This commit is contained in:
@@ -230,6 +230,17 @@ func convertParameter(p map[string]any) map[string]any {
|
||||
}
|
||||
out[k] = v
|
||||
}
|
||||
// Swagger 2.0 has no object query parameters; swag emits `type: object`
|
||||
// for one. cabana reads such a parameter as bracketed keys
|
||||
// (filter[<name>]=<value>), which is OpenAPI 3's deepObject style with
|
||||
// string values.
|
||||
if in, _ := out["in"].(string); in == "query" && schema["type"] == "object" {
|
||||
if _, ok := schema["additionalProperties"]; !ok {
|
||||
schema["additionalProperties"] = map[string]any{"type": "string"}
|
||||
}
|
||||
out["style"] = "deepObject"
|
||||
out["explode"] = true
|
||||
}
|
||||
if len(schema) > 0 {
|
||||
out["schema"] = schema
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user