blob: a44b21d4cb24c84b2459e27db03db6d96adf5589 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
(ns bbbg.views.flash
(:require [clojure.spec.alpha :as s]))
(s/def :flash/type #{:success :error :warning :info})
(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)])])))
(def test-flash
{:flash/messages
(for [type [:success :error :warning :info]]
{:flash/type type
:flash/message (str "Sample " type " message")})})
|