|
|
@ -128,6 +128,13 @@
|
|
128
|
128
|
(dom/option nil (str v)))
|
|
129
|
129
|
(rest type))))))
|
|
130
|
130
|
|
|
|
131
|
(defn make-typed-field [m optional?]
|
|
|
132
|
(fn [[k t]]
|
|
|
133
|
(dom/div #js {:className "field"}
|
|
|
134
|
(dom/label nil (str k (when optional? " (optional)")))
|
|
|
135
|
(om/build make-typed-input m {:opts {:type t, :key k, :val (k m)
|
|
|
136
|
:optional? optional?}}))))
|
|
|
137
|
|
|
131
|
138
|
(defmethod make-typed-input 'HMap [m owner {type :type}]
|
|
132
|
139
|
(let [hmap (apply hash-map (rest type))
|
|
133
|
140
|
required (:mandatory hmap)
|
|
|
@ -135,13 +142,8 @@
|
|
135
|
142
|
(om/component
|
|
136
|
143
|
(dom/div nil
|
|
137
|
144
|
(dom/span nil "{")
|
|
138
|
|
(into-array
|
|
139
|
|
(map (fn [[k t]]
|
|
140
|
|
(dom/div #js {:className "field"}
|
|
141
|
|
(dom/label nil (str k))
|
|
142
|
|
(om/build make-typed-input m {:opts {:type t, :key k, :val (k m)
|
|
143
|
|
:optional? (contains? optional k)}})))
|
|
144
|
|
(merge required optional)))
|
|
|
145
|
(into-array (map (make-typed-field m false) required))
|
|
|
146
|
(into-array (map (make-typed-field m true) optional))
|
|
145
|
147
|
(dom/span nil "}")))))
|
|
146
|
148
|
|
|
147
|
149
|
(def app-state
|