Просмотр исходного кода

move update-on-change! before first use.

clojurescript being compiled to javascript allows this (hoisted
variables), but it emits a warning and might be confusing/non-idiomatic.
Lucas Stadler лет назад: 12
Родитель
Сommit
4249386d49
1 измененных файлов с 10 добавлено и 10 удалено
  1. 10 10
      clj/clarity/cljs/clarity.cljs

+ 10 - 10
clj/clarity/cljs/clarity.cljs

60
                 [k (empty-value v)])
60
                 [k (empty-value v)])
61
               entries))))
61
               entries))))
62
62
63
(defn update-on-change!
64
  ([m k] (update-on-change! m k identity))
65
  ([m k transform-fn] (update-on-change! m k transform-fn false))
66
  ([m k transform-fn optional?]
67
   (fn [ev]
68
     (let [new-val (transform-fn (.. ev -target -value))]
69
       (if (and optional? (empty? new-val))
70
         (om/update! m dissoc k)
71
         (om/transact! m k (fn [_ n] n) new-val))))))
72
63
(defmulti make-typed-input
73
(defmulti make-typed-input
64
  (fn [_ _ {type :type} & _]
74
  (fn [_ _ {type :type} & _]
65
    (cond
75
    (cond
88
                    :pattern keyword-pattern
98
                    :pattern keyword-pattern
89
                    :onChange (update-on-change! m key #(or (read-keyword %) (empty-value type)))})))
99
                    :onChange (update-on-change! m key #(or (read-keyword %) (empty-value type)))})))
90
100
91
(defn update-on-change!
92
  ([m k] (update-on-change! m k identity))
93
  ([m k transform-fn] (update-on-change! m k transform-fn false))
94
  ([m k transform-fn optional?]
95
   (fn [ev]
96
     (let [new-val (transform-fn (.. ev -target -value))]
97
       (if (and optional? (empty? new-val))
98
         (om/update! m dissoc k)
99
         (om/transact! m k (fn [_ n] n) new-val))))))
100
101
(defmethod make-typed-input 'String [m owner {:keys [type key val optional?]}]
101
(defmethod make-typed-input 'String [m owner {:keys [type key val optional?]}]
102
  (om/component
102
  (om/component
103
    (dom/input #js {:type "text"
103
    (dom/input #js {:type "text"