/
message.cljs
80 lines (68 loc) · 2.03 KB
/
message.cljs
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
(ns ant.design.message
"Display global messages as feedback in response to user operations.
When to use:
- To provide feedback such as success, warning, error etc
- A message is displayed at top and center and will be dismissed
automatically, as a non-interrupting light-weighted prompt"
(:require [ant.design.utils :refer [apply-fn]]))
;;
;; Helper functions
;;
(defn- message [& args]
(apply-fn "message" args))
;;
;; Message API
;;
(defn configure
"Set global configuration for all messages.
Usage:
(configure {:top 24
:duration 2
:maxCount 3})
Returns:
nil"
[options]
(message "config" options))
(def ^:private levels
#{nil :success :error :info :warning :warn :loading})
(defn show
"Show message.
Usage:
(show {:level :loading
:content \"Action in progress...\"
:duration 3
:on-close #(js/console.log :callback/on-close)
:after-close #(js/console.log :callback/after-close)})
Returns:
Promise"
[{:keys [level content duration on-close after-close]}]
{:pre [(contains? levels level)]}
(let [level (if level
(name level)
"info")
duration (when (or (pos? duration)
(zero? duration))
duration)
callback (cond
(and (fn? on-close)
(nil? after-close)) :one
(every? fn? [on-close after-close]) :both
:else :none)
props (case callback
:one [level content duration on-close]
:both [level content duration on-close after-close]
:none [level content duration])]
(let [promise (->> props
(remove nil?)
(apply message))]
(if-not (= :both callback)
promise
(.then promise after-close)))))
(defn destroy
"Destroy message.
Usage:
(destroy)
Returns:
nil"
[]
(message "destroy"))