From 88560a8fbf6d0c8bac45a07c29bd4ab23b50968b Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Mon, 22 Apr 2019 12:03:36 +0200 Subject: sklad: prefill form with last values on error Since the browser's back button cannot be used because of our fascist caching policy. --- cmd/sklad/container.tmpl | 23 +++++++++++++++-------- cmd/sklad/main.go | 30 +++++++++++++++++++----------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/cmd/sklad/container.tmpl b/cmd/sklad/container.tmpl index 7fa1654..479174c 100644 --- a/cmd/sklad/container.tmpl +++ b/cmd/sklad/container.tmpl @@ -36,18 +36,19 @@
-
@@ -55,7 +56,7 @@
+ value="{{ or .NewParent .Container.Parent }}">
@@ -69,21 +70,27 @@

Nový obal

- + {{- $description := or .NewDescription "" }} + diff --git a/cmd/sklad/main.go b/cmd/sklad/main.go index 52cbee5..4808713 100644 --- a/cmd/sklad/main.go +++ b/cmd/sklad/main.go @@ -123,7 +123,6 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, redirect, http.StatusSeeOther) return } - // TODO: Use the last data as a prefill. } else if r.Method != http.MethodGet { w.WriteHeader(http.StatusMethodNotAllowed) return @@ -134,14 +133,6 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { allSeries[s.Prefix] = s.Description } - var container *Container - children := indexChildren[""] - - if c, ok := indexContainer[ContainerId(shownId)]; ok { - children = c.Children() - container = c - } - params := struct { Error error ErrorNoSuchSeries bool @@ -152,6 +143,9 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { ErrorWouldContainItself bool ErrorContainerInUse bool Container *Container + NewDescription *string + NewSeries string + NewParent *string Children []*Container AllSeries map[string]string }{ @@ -163,10 +157,24 @@ func handleContainer(w http.ResponseWriter, r *http.Request) { ErrorCannotChangeNumber: err == errCannotChangeNumber, ErrorWouldContainItself: err == errWouldContainItself, ErrorContainerInUse: err == errContainerInUse, - Container: container, - Children: children, + Children: indexChildren[""], AllSeries: allSeries, } + if c, ok := indexContainer[ContainerId(shownId)]; ok { + params.Children = c.Children() + params.Container = c + } + if description, ok := r.Form["description"]; ok { + params.NewDescription = &description[0] + } + if series, ok := r.Form["series"]; ok { + // It seems impossible to dereference strings in text/template so that + // `eq` can be used, and we don't actually need a null value here. + params.NewSeries = series[0] + } + if parent, ok := r.Form["parent"]; ok { + params.NewParent = &parent[0] + } executeTemplate("container.tmpl", w, ¶ms) } -- cgit v1.2.3-70-g09d2