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

support simple union types.

e.g. unions where the possibilities are all of type `Value`.
Lucas Stadler лет назад: 12
Родитель
Сommit
5ac0b5ed01
1 измененных файлов с 15 добавлено и 0 удалено
  1. 15 0
      clj/clarity/cljs/clarity.cljs

+ 15 - 0
clj/clarity/cljs/clarity.cljs

43
(defmethod empty-value 'String [{:keys [default]}]
43
(defmethod empty-value 'String [{:keys [default]}]
44
  (or default ""))
44
  (or default ""))
45
45
46
(defmethod empty-value 'U [[_ & [[_ v]]]]
47
  v)
48
46
(defmethod empty-value 'HMap [spec]
49
(defmethod empty-value 'HMap [spec]
47
  (let [entries (nth spec 2)]
50
  (let [entries (nth spec 2)]
48
    (into {}
51
    (into {}
79
                    :value (om/value string)
82
                    :value (om/value string)
80
                    :onChange #(om/update! string (fn [_ n] n) (.. % -target -value))})))
83
                    :onChange #(om/update! string (fn [_ n] n) (.. % -target -value))})))
81
84
85
(defmethod make-typed-input 'U [value owner {type :type}]
86
  (om/component
87
    (dom/select nil
88
      (into-array
89
        (map (fn [[_ v]]
90
               (dom/option nil (str v)))
91
             (rest type))))))
92
82
(defmethod make-typed-input 'HMap [m owner {type :type}]
93
(defmethod make-typed-input 'HMap [m owner {type :type}]
83
  (om/component
94
  (om/component
84
    (dom/div nil
95
    (dom/div nil
95
  (let [type '(HMap :mandatory
106
  (let [type '(HMap :mandatory
96
                    {:name {:type String :default "Paul"},
107
                    {:name {:type String :default "Paul"},
97
                     :age {:type Number, :default 10},
108
                     :age {:type Number, :default 10},
109
                     :language (U (Value :en)
110
                                  (Value :de)
111
                                  (Value :fr)
112
                                  (Value :jp))
98
                     :gender Keyword})]
113
                     :gender Keyword})]
99
    (atom
114
    (atom
100
     {:type type
115
     {:type type