feat(grfn/bbbg): Display flash messages
Get flash working via a functioning cookie-store session middleware, and display flash messages if present at the top of every page. Change-Id: If5f267dee3f41ef7954ea82667822c596e1b0474
This commit is contained in:
parent
e7899e6c0b
commit
0286d63df7
5 changed files with 98 additions and 18 deletions
33
users/grfn/bbbg/src/bbbg/views/flash.clj
Normal file
33
users/grfn/bbbg/src/bbbg/views/flash.clj
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
(ns bbbg.views.flash
|
||||
(:require [clojure.spec.alpha :as s]))
|
||||
|
||||
(s/def :flash/type #{:success :error :warning})
|
||||
(s/def :flash/message string?)
|
||||
(s/def ::flash (s/keys :req [:flash/type :flash/message]))
|
||||
(s/fdef add-flash :args (s/cat :resp map? :flash ::flash) :ret map?)
|
||||
|
||||
;;;
|
||||
|
||||
(def ^:dynamic *flash* nil)
|
||||
|
||||
(defn wrap-page-flash [handler]
|
||||
(fn
|
||||
([request]
|
||||
(binding [*flash* (:flash request)]
|
||||
(handler request)))
|
||||
([request respond raise]
|
||||
(binding [*flash* (:flash request)]
|
||||
(handler request respond raise)))))
|
||||
|
||||
(defn add-flash [resp flash]
|
||||
(update-in resp [:flash :flash/messages] conj flash))
|
||||
|
||||
(defn render-flash
|
||||
([] (render-flash *flash*))
|
||||
([flash]
|
||||
(when-some [messages (not-empty (:flash/messages flash))]
|
||||
[:ul.flash-messages
|
||||
(for [message messages]
|
||||
[:li.flash-message
|
||||
{:class (str "flash-" (-> message :flash/type name))}
|
||||
(:flash/message message)])])))
|
||||
Loading…
Add table
Add a link
Reference in a new issue